在主线程中创建多个线程,如何在主线程中判断所有线程已经运行完毕?

kyqSimon 2009-02-04 09:23:58
在主线程中创建多个线程,如何在主线程中判断所有线程已经运行完毕?
...全文
287 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
多线程,计数器方式不错。
hzcenter 2009-02-10
  • 打赏
  • 举报
回复
with mThread.Create() do
OnTerminate:=mThreadDone;
simb 2009-02-10
  • 打赏
  • 举报
回复
可以用的方法很多啊
如果主线程就为了等待子线程可以用WAITFORMULTOBJECT;
如果主线程是在结束的时候判断的话可以用循环判断你的线程是否已经结束了。
hanjing7742 2009-02-09
  • 打赏
  • 举报
回复
关键是看你的应用是怎样的,如果只是需要判断子线程是否执行结束,4楼的办法最简洁。
luxuewei5214 2009-02-05
  • 打赏
  • 举报
回复
楼上好方法
武稀松 2009-02-05
  • 打赏
  • 举报
回复
我一般做法是弄一个TList之类的放在线程管理类中.
当线程被创建首先去加锁,把自己加到List中,解锁.
当线程结束的时候先加锁,把自己从List中删除,解锁.

这样的好处是可以访问到任何子线程对象.如果不需要在外边访问子线程对象liangpei2008的办法不失一个好办法.
无条件为你 2009-02-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 unsigned 的回复:]
GetExitCodeThread

也可以用WaitFor*系列函数。
[/Quote]
liangpei2008 2009-02-04
  • 打赏
  • 举报
回复
其实可以这样!
设计一个全局变量N,用于记录系统中生成的线程数!而后在每个线程的终止函数中用InterlockedDecrement(N)来对线程数减1,直至减为0即可证明全部线程已退出。由于终止函数与InterlockedDecrement都是线程安全的(严格地说,终止函数是将控制权移交给主线程处理的),故也不需要线程同步,比较简便!
bdmh 2009-02-04
  • 打赏
  • 举报
回复
支持1楼
僵哥 2009-02-04
  • 打赏
  • 举报
回复
GetExitCodeThread

也可以用WaitFor*系列函数。

830

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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