如何让线程 暂停和停止?

peipei160509 2008-04-20 01:18:31
while not Adoquery1.Eof do
begin
gjz:=adoquery1.fieldbyname('gjz').AsString;
thread:=tserch.create(gjz);
delay(800);
adoquery1.Next;
end;

如何让这样创建的线程 暂停和 终止??
...全文
324 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
支持搂主,收藏
xiaocha 2008-04-27
  • 打赏
  • 举报
回复
上面有点错误!

如果要知道有哪些线程,可以这样:

1 建立一个全局 TCriticalSection cs;
2 建立一个全局 TList list;
3 在线程入口加入
cs.Enter;
try
list.Add(self);
finally
cs.Leave;
end;
4 在线程的出口加入
cs.Enter;
try
list.Remove(self);
finally
cs.Leave;
end;

这样你就有了一个线程的列表,要知道线程是否挂起,调用他的suspend属性就可以了,例如

if TThread(list[0]).suspend then ......


xiaocha 2008-04-27
  • 打赏
  • 举报
回复
呵呵,这么回事。可是你都不知到有哪些线程,如何让他挂起和唤醒?

如果要知道有哪些线程,可以这样:

1 建立一个全局 TCriticalSection cs;
2 建立一个全局 TList list;
3 在线程入口加入
cs.Enter;
try
list.Add(self);
4 在线程的出口加入
finally
list.remove(self);
end;

这样你就有了一个线程的列表,要知道线程是否挂起,调用他的suspend属性就可以了,例如

if TThread(list[0]).suspend then ......
skylkj 2008-04-21
  • 打赏
  • 举报
回复
把"循环创建线程"的操作放到一个线程里面,然后用1楼的方法挂起,唤醒
shuihan20e 2008-04-21
  • 打赏
  • 举报
回复
可以找本书看看
peipei160509 2008-04-20
  • 打赏
  • 举报
回复
这个知道,我说的是在线程执行后,让他挂起!!
如果只创建以个线程,,直接用thread.Suspend; 就可以了,这个我知道!!

但是我的程序不是这样的,,就是说,不知道 可能会创建几个线程,,因为每过800毫秒创建一个线程,,,然后每个线程需要过几秒才能运行完毕,运行完毕后就自动销毁,,这样的循环创建 线程 该如何挂起,和唤醒呢???

大家明白我的意思吗?
jadeluo 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 peipei160509 的回复:]
比如这个创建的十个线程,,那又该如何 暂停和终止呢??

你说的办法我早就试过了,不管用!
[/Quote]

估计是你不会用。

gjz:=adoquery1.fieldbyname('gjz').AsString;
thread:=tserch.create(gjz);
thread.Suspend; //这行语句执行之后,如果线程还会继续执行的话,那就见鬼了
peipei160509 2008-04-20
  • 打赏
  • 举报
回复
比如这个创建的十个线程,,那又该如何 暂停和终止呢??

你说的办法我早就试过了,不管用!
xiaocha 2008-04-20
  • 打赏
  • 举报
回复
暂停:thread.Suspend;
继续:thread.Resume;
停止:thread.Terminate; thread.WaitFor;

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧