这样会引起死锁么

richedit 2010-06-08 10:25:27
我在程序开始的时候开启几个线程,在线程的onterminate事件里判断是否所有线程都结束了。

我要在线程都结束之后再开始运行主线程,因为主线程要用到那个几个线程的处理结果。所以就在onterminate事件函数里判断所有线程都结束之后setevent,然后在开启线程之后的主线程里waitfor。因为onterminate的事件是在主线程里,这样会引起死锁么?还有别的方法同步了么?
...全文
117 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hind24 2010-06-12
  • 打赏
  • 举报
回复
你的主线程如果是界面主线程,等待中是肯定无法响应的,如果是另外的线程就可以避免界面不响应

多个线程都用waitfor同步是肯定要等待的,建议看看帮助里的计数法
Waiting4you 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 richedit 的回复:]

我改用了waitfor还蛮好的
不过 汗 有个新问题
在主线程waitfor的话 主线程就没反应了,程序界面就死掉的样子,一直等到多线程运行结束。。。。。这个还有办法么?

我这程序写的实在是太挫了
[/Quote]
你说"要在线程都结束之后再开始运行主线程,因为主线程要用到那个几个线程的处理结果".那么,你可以做一个进度条,更新线程的进度;也可以象Office之类的软件一样,运行并显示一个Logo之类的,等线程运行结束再显示主窗口.
如果不喜欢上面的方法,你也可以在那些线程里插入ProcessMessages(),注意同步.
zzbinfo 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 richedit 的回复:]
我改用了waitfor还蛮好的
不过 汗 有个新问题
在主线程waitfor的话 主线程就没反应了,程序界面就死掉的样子,一直等到多线程运行结束。。。。。这个还有办法么?

我这程序写的实在是太挫了
[/Quote]
没有一个人是一开始就会写程序的,不要气馁,慢慢来。虽然我帮不了你。
richedit 2010-06-11
  • 打赏
  • 举报
回复
我改用了waitfor还蛮好的
不过 汗 有个新问题
在主线程waitfor的话 主线程就没反应了,程序界面就死掉的样子,一直等到多线程运行结束。。。。。这个还有办法么?

我这程序写的实在是太挫了
hind24 2010-06-09
  • 打赏
  • 举报
回复
不是很理解楼主的做法,你说的主线程是程序自动产生的主线程还是自定义的主要工作线程?
我也很想知道怎么干预程序的主线程。
无论是什么样的主线程,完全可以尽早启动,作为主线程最好最早启动。可以不停询问其他线程状态,满足条件则执行相应操作。
关于多线程同步,帮助里面还有种记数法可以用
lirg8405 2010-06-09
  • 打赏
  • 举报
回复
我认为只要onterminate能够得到setevent,那么主线程是应该可以执行的
taozc 2010-06-09
  • 打赏
  • 举报
回复
同意3楼的,主线程WaitFor。。。,
Waiting4you 2010-06-09
  • 打赏
  • 举报
回复
为什么要在onterminate里判断所有线程已结束?线程对象本来就有一个WaitFor方法,直接在主线程WaitFor这些线程不就行了?

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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