大家好,我有一个工作线程在qt与C++,如果我在主窗口销毁~mainwindow{}
或在工作线程销毁其本身中使用workerThreadPointer->quit();
,当我关闭程序时,我会得到这个错误QThread: Destroyed while thread is still running
,但如果我使用workerThreadPointer->terminate();
,我不会得到任何错误,但不建议使用terminate()
方法,所以我如何在关闭程序时使用quite
而不崩溃犯错误
我真的用了这个,效果很好,但是这是最好的方法吗?
bool asghar;
workerThread::workerThread(){
}
workerThread::~workerThread(){
quit();
requestInterruption();
asghar=0;
wait(100);
}
void workerThread::run(){
asghar=1;
while(asghar==true){
do something
}
}
基本上我强迫它用一个布尔变量退出while循环,但我不确定这是不是最好的选择,顺便说一句,如果我把等待中的100改为10,它就不起作用了。
1条答案
按热度按时间7kqas0il1#
我不确定这是一个打字错误,因为你只写了伪代码,或者它在你的程序中实际上是这样的。但是
while(asgar=true)
并没有做你认为它做的事情。典型的=
与==
错误。应该是这样的:
另外,编译器可以自由地优化
asghar
的检查,因为它的访问不是线程安全的。考虑将asghar
更改为std::atomic<bool>
类型,或者用互斥体 Package 赋值和检查调用。在
asghar
的赋值和比较检查周围添加print/log语句,以查看发生了什么。