• 19127阅读
  • 10回复

求助qthread 结束方法 [复制链接]

上一主题 下一主题
离线20044454
 
只看楼主 倒序阅读 楼主  发表于: 2009-05-20
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
自己写了一个对象名 为RecordThread类继承了QThread 重写了run(),
调用 record->start()也可以正常使用,
但我要结束这个进程
record->exit();
delete record;
record = 0;
出现问题
错误:QThread: Destroyed while thread is still running

同时 主线程也死掉了

请问原因出在哪里了?谢谢
[ 此帖被20044454在2009-05-20 14:44重新编辑 ]
让我做一个Qt的大牛!!!!
离线bingogo
只看该作者 1楼 发表于: 2009-05-20
*.h
RecordThread *record;

*.cpp
record->start();
// do sth...
record->exit();

Try it.
离线palpatine
只看该作者 2楼 发表于: 2009-05-21
QThread::exit只是post一个要线程退出的事件, 所以你干嘛要一call以后就删掉呢? 在主线程析构里面删不行么?
离线20044454
只看该作者 3楼 发表于: 2009-05-21
还是不太明白
让我做一个Qt的大牛!!!!
离线ferguson442

只看该作者 4楼 发表于: 2009-05-21
record->terminate();
record->wait();
delete record;
record = 0;

exit()函数不是干这事的,看文档。
离线bingoking
只看该作者 5楼 发表于: 2009-05-21
QThread::run()
{
      while(!stop_flag)
      {
           ........
      }
     stop_flag=false;
}
QThread::stop()
{
    stop_flag=true;
}
加一个stop_falg的标识符,以及stop()函数;
其他地方调用:
thread->stop();
thread->wait()
离线bingoking
只看该作者 6楼 发表于: 2009-05-21
QThread::terminate();这个函数最好不要随便用,可能造成不可预知的错误
离线20044454
只看该作者 7楼 发表于: 2009-05-22
谢谢了,不能用terminate()
让我做一个Qt的大牛!!!!
离线20044454
只看该作者 8楼 发表于: 2009-05-22
但用wait() 有时候会出现GUI线程界面僵死
让我做一个Qt的大牛!!!!
离线lisuzhen929
只看该作者 9楼 发表于: 2011-06-17
先exit();
再wait();
就可以
离线陈小草
只看该作者 10楼 发表于: 2012-12-27
deletelater
快速回复
限100 字节
 
上一个 下一个