• 10359阅读
  • 8回复

如何结束线程 [复制链接]

上一主题 下一主题
离线cresthong
 

只看楼主 倒序阅读 楼主  发表于: 2008-09-11
— 本帖被 XChinux 执行加亮操作(2008-11-30) —
用terminate()不安全,有没有好的方法?
离线XChinux

只看该作者 1楼 发表于: 2008-09-11
thread.terminate();
thread.wait();
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线blackdire

只看该作者 2楼 发表于: 2008-09-11
最好的结束是等线程函数自行结束,如果需要线程在执行完结束,最好使用Event之类的信号量,在线程中检测该信号量,如果设置了状态,就结束函数
离线blusherbear

只看该作者 3楼 发表于: 2008-09-11
设置一个变量 bool bStop = false,线程处理循环检测bStop状态
while(!bStop)
{
  do sth.
}
要停止线程时,在主线程中设置bStop = true,然后wait()线程结束即可
离线tim09
只看该作者 4楼 发表于: 2008-11-20
老贴再问新问题,请问这个线程结束是指在主程序里new的这个线程结束了,无需再在主程序里delete这个线程的实例了对吗? 然后要想重新启动线程,就要再new一个这个线程的实例,是这个意思吗?
离线yooi
只看该作者 5楼 发表于: 2008-11-23
线程已经成为standby的状态 可以重新激活

我用一下方法结束
forever(){...}的线程确实 有时候会出错

thread.terminate();
thread.wait();
离线fangjuntan

只看该作者 6楼 发表于: 2008-11-23
回 3楼(blusherbear) 的帖子
这样如果是当作子线程,当stop=true时,是不是线程意味着结束,要想再次启动子线程,是不是重新建立一个线程对象????
离线tim09
只看该作者 7楼 发表于: 2008-11-25
引用第5楼yooi于2008-11-23 00:37发表的  :
线程已经成为standby的状态 可以重新激活
我用一下方法结束
forever(){...}的线程确实 有时候会出错
.......

麻烦,请问怎么实现standby状态,是线程挂起状态吧,我找了很久都没找到怎么实现这个状态,有人用sleep,这个实在不好,你怎么实现的呢?
离线tim09
只看该作者 8楼 发表于: 2008-11-25
Re:回 3楼(blusherbear) 的帖子
引用第6楼fangjuntan于2008-11-23 14:54发表的 回 3楼(blusherbear) 的帖子 :
这样如果是当作子线程,当stop=true时,是不是线程意味着结束,要想再次启动子线程,是不是重新建立一个线程对象????

我也是一样的问题,我一开始用terminate()结束,但是用start()还能激活线程,后来用stop=true就不能用start()再激活了,似乎线程是结束了,结束线程后在主程序里用delete线程会报错,然后可以new一个新的线程,但是不知道原来的是不是自动删处了. 有没有高人来解释一下.
快速回复
限100 字节
 
上一个 下一个