如何解决QThread isRunning 始终为真
我在 linux 和 windows 上都使用 QT 5.11.2。我正在尝试优化我的 UI,以防止它在大型功能中冻结。我开始使用 QThread
并且能够在 Windows 上做我想做的事情。但是,我尝试在 linux RHEL7 上测试相同的功能,但线程从未完成。
这是我尝试过的:
void MainWidget::Configure_BERT_DSO(bool isOptimization,double lineRate,int Scaling)
{
QThread *bertThread = QThread::create([this,lineRate,Scaling]{ ConfigureBert(lineRate,Scaling);
QThread *dsoThread = QThread::create([this,lineRate]{ ConfigureDSO(lineRate); });
bertThread->setobjectName("My Bert Thread");
dsoThread->setobjectName("My DSO Thread");
bertThread->start();
dsoThread->start();
while(bertThread->isRunning() || dsoThread->isRunning()) // even tried isFinished()
{
qApp->processEvents();
}
bertThread->exit();
dsoThread->exit();
delete bertThread;
delete dsoThread;
}
在 Windows 中,while
循环会在一段时间后退出,并且两个线程都可以正确执行,没有问题。
在 linux 上,为了确保两个函数都正确执行,我在每个函数的开头和结尾添加了 qDebug()
,并且它们都在预期的时间到达。但问题是 isRunning
永远不会再次变为真,isFinished
也是如此,我的循环卡住了。
线程:QThread(0x1d368b0,name = "My Bert Thread") 已启动。
线程:QThread(0x1d368e0,name = "My DSO Thread") 已启动。
线程:QThread(0x1d368b0,name = "My Bert Thread") 完成。
线程:QThread(0x1d368e0,name = "My DSO Thread") 已完成。
它是依赖于平台的东西还是我可能缺少的东西?
编辑
我还尝试使用 bertThread->wait()
和 dsoThread->wait()
来检查它是否在我的函数完成后退出,但它永远不会从我调用的第一个函数返回,尽管这两个函数都成功地结束了
非常感谢您的帮助
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。