我在 Windows 7旗舰版(32位)计算机上使用 Qt 4.7.0(32位)。我一直在使用Qt版本4.0或4.2,我几乎使用了所有 4.x.y 版本。
最近,在Qt 4.7中我遇到了麻烦。
我在一些旧版本的Qt中编写了一个多线程应用程序。我忘记了版本,但可能是我编译和正确运行的最后一个版本是4.5.x或4.6.x. 线程部分似乎在4.7中没有正常工作,或者我误解了一些东西。这是问题所在:
主线程启动thinker
线程。以下是run()
线程的thinker
函数:
void ThinkerThread::run()
{
_threads_running = NSUBTHINKERS;
// ...
_sub_thinker[0].start();
// ...
_sub_thinker[1].start();
exec();
}
_sub_thinker
的{{1}}信号与所有finished()
的{{1}}广告连接。完成所有ThinkerThread::subThinkerFinished()
后,_sub_thinker
会调用_sub_thinker
。
还有另一个地方叫ThinkerThread::subThinkerFinished()
:
quit()
从主线程开始,执行如下:
quit()
的{{1}}信号与void ThinkerThread::tryKill()
{
for (int i = 0; i < NSUBTHINKERS; i++)
_sub_thinker[i].tryKill();
quit();
}
相关联。
对于所有以前版本的Qt,thinker
在finished()
调用autoMove()
后被调用。在4.7中我看到autoMove()
在第一次调用thinker::quit()
之后被调用,即使线程没有运行。
有什么想法吗?
当然,如果ThinkerThread::subThinkerFinished()
正在运行,我可以在autoMove()
内查看。但我想知道为什么会这样。
感谢。
答案 0 :(得分:0)
我发现每次调用QThread::finished()
时都会发出QThread::quit()
,无论QThread
的状态如何(即运行/未运行)。对于先前版本的Qt,情况并非如此。