我使用 Qt 4.8.6、MS Visual Studio 2008、Windows 7。我创建了一个 GUI 程序。它包含主 GUI 线程和工作线程(顺便说一句,我没有制作 QThread
子类),它们同步调用第 3 方 DLL 函数。这些功能相当慢。 QTcpServer
实例也在工作线程下。我的 worker 类包含 QTcpServer
和 DLL 包装器方法。
我知道 quit()
优于 terminate()
,但我不想在程序关闭期间等待一分钟(因为 DLL 函数速度慢) .当我尝试 terminate()
工作线程时,我注意到有关从另一个线程停止 QTcpServer
的警告。进程关闭的正确方法是什么?
最佳答案
QThread::quit
告诉线程的事件循环退出。调用它后,一旦控件返回到线程的事件循环,线程就会结束
您也可以通过 QThread::terminate()
强制线程立即终止,但这是一种非常糟糕的做法,因为它可能会在其代码中未定义的位置终止线程,这意味着您最终可能会得到永远无法释放的资源和其他令人讨厌的东西。所以只有当你真的无法绕过它时才使用它。
所以我认为正确的做法是首先告诉线程正常退出,如果出现问题并且花费了很多时间并且您没有办法等待它,那么就终止它:
QThread * th = myWorkerObject->thread();
th->quit();
th->wait(5000); // Wait for some seconds to quit
if(th->isRunning()) // Something took time more than usual, I have to terminate it
th->terminate();
关于c++ - 在程序关闭期间终止 Qt 工作线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29384705/