• 6594阅读
  • 9回复

关于线程的紧急问题(已解决) [复制链接]

上一主题 下一主题
离线wu9961
 

只看楼主 倒序阅读 楼主  发表于: 2009-01-21
— 本帖被 XChinux 执行加亮操作(2009-03-13) —
void xxx:run()
{
      xxxxx *aa= new xxxxx();
      aa->begin();
}
比方说这个的一个线程
xxxxx类中有自己的信号和槽,但是一不小心start执行之后就会返回,线程就会自行结束。这就违背了我的原意,请问如何避免这种情况,很尴尬。
[ 此贴被wu9961在2009-01-25 12:41重新编辑 ]
只看该作者 1楼 发表于: 2009-01-21
用exec()试试
离线signallock

只看该作者 2楼 发表于: 2009-01-21
你的意思是不是希望线程一直运行?如果是,可以在xxxxx::run()中用forever;不过这样处理器占用率会比较大,所以也可以这样:
void xxxxx::run()
{
  forever sleep(1000);
}
离线wu9961

只看该作者 3楼 发表于: 2009-01-22
是这个意思差不多 但是我想让他完成任务之后停止,但是这个任务不是即时的,需要等待
[ 此贴被wu9961在2009-01-22 04:17重新编辑 ]
离线signallock

只看该作者 4楼 发表于: 2009-01-22
不清楚是什么样的任务,如果是直接在run()里面运行的话,就让任务完成之后死循环,要是通过信号槽执行任务的话就直接让run()死循环,之后添加一个信号槽,如果任务结束,就发射finished()信号,在aa->start()之前先connect(aa,SIGNAL(finished()),aa,SLOT(deleteLater()));之后线程就被撤销了。
离线roc496
只看该作者 5楼 发表于: 2009-01-22
我个人觉得是对象aa的parent设置问题
你试试吧
离线signallock

只看该作者 6楼 发表于: 2009-01-22
我理解错了,你的那个xxx是继承QThread的吧,那就在aa->start()之后死循环,之后aa如果执行完,就发射一个信号,这个信号和xxx的finished()信号连起来,就可以了
离线wu9961

只看该作者 7楼 发表于: 2009-01-24
谢谢大家的解答 我试验一下
离线wu9961

只看该作者 8楼 发表于: 2009-01-25
引用第1楼都市无名者于2009-01-21 22:40发表的  :
用exec()试试

刚看到你的方法还不会用,现在看了很多关于这个的介绍,使用之后,问题解决!哈!
离线z000356
只看该作者 9楼 发表于: 2009-03-13
兄台 你的问题解决了吗
快速回复
限100 字节
 
上一个 下一个