• 28397阅读
  • 11回复

怎样干净又安全的终止线程? [复制链接]

上一主题 下一主题
离线引子
 
只看楼主 倒序阅读 楼主  发表于: 2011-02-13
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2011-03-04) —
main函数中将新建的gps对象放入子线程中运行,主线程运行一个widget窗口。关闭窗口时,同时关闭子线程。
Gps继承QObject类,在Gps类中使用了定时器,所有派生类都没有重新实现析构函数。现在关闭窗口后,qt creator提示:
QObject::killTimer: timers cannot be stopped from another thread
QObject::killTimers: timers cannot be stopped from another thread
QThread: Destroyed while thread is still running
请问怎样才能在关闭窗口时,同时安全的关闭子线程?谢谢指教了!


[ 此帖被引子在2011-02-13 14:20重新编辑 ]
步子大了扯着蛋!
离线引子
只看该作者 1楼 发表于: 2011-02-13
SOS!
步子大了扯着蛋!
离线losemyheaven
只看该作者 2楼 发表于: 2011-02-13
标记  有同问...  
等高手...
离线gaocan
只看该作者 3楼 发表于: 2011-02-13
顶一下 高手指教啊
离线cahwxy

只看该作者 4楼 发表于: 2011-02-13
A. 发起线程退出操作,调用quit
B. 等待线程完全停止,删除堆上创建的对象
C. 确定线程是否在运行,调用 isrun or isfinish
D. 适当的使用 wait 函数和合理的算法
离线l270378034

只看该作者 5楼 发表于: 2011-02-13
我也想知道
linux_qt
离线引子
只看该作者 6楼 发表于: 2011-03-04
怎么样在要结束主线程前,先把子线程结束?
避免这样的警告:QThread: Destroyed while thread is still running
请高手指教,详细点,谢谢
[ 此帖被引子在2011-03-04 17:28重新编辑 ]
步子大了扯着蛋!
离线zihongdelei
只看该作者 7楼 发表于: 2011-03-05
主动quit或者通过信号关闭,多线程中信号/槽自动设为异步,主线程要等子线程的finish信号收到才能退出程序
离线dnyh123

只看该作者 8楼 发表于: 2011-03-15
wait 很重要
离线83888788
只看该作者 9楼 发表于: 2011-03-15
disconect(.........) ;  //关闭所有与该进程对象关联的信号和槽
thread->quit();
thread->wait();
thread->deleteLater();
离线voidbroken

只看该作者 10楼 发表于: 2011-03-30
while(QThread::currentThread()->isRunning())
{
    QThread::currentThread()->quit();
}
离线happyday23

只看该作者 11楼 发表于: 2011-04-07
估计楼主已经解决了吧, 很简单的问题:

应该是楼主的timer是在gps的构造函数里创建的, 而构造函数运行时, 也就是timer创建时, gps是在主线程中运行的,也就是timer是属于主线程的, 而当movetoThread后,gps却变成了thread的Object, 但是注意了, timer还是注册在主线程中!, 当程序结束运行, thread试图析构gps, 却发现gps的timer不在当前线程中, 所以报提示, 而thread也就因此没停下来!~
快速回复
限100 字节
 
上一个 下一个