我正在尝试使用QThread
在另一个线程中调用函数而无需冻结 UI。我在windows和linux上都使用QT5.11.2。
在 Windows 上一切正常,但 wait() 函数QThread
无论如何都不会返回。
我在 Linux 上使用RHEL7
这是我正在做的事情:
void MainWidget::configure_click(double value)
{
QThread *myThread = QThread::create([this, value]{ Configure(value); });
dsoThread->setObjectName("My Configure Thread");
QObject::connect(myThread, &QThread::finished, [](){ qDebug()<< "Configure Thread has finished";}); // This is never printed
myThread->start();
myThread->wait(); // Never returns from this
myThread->quit();
myThread->deleteLater();
}
我的Configure
函数打印它的开始和结束,并且两行都在运行时打印
void MainWidget::Configure(double value)
{
qDebug() << QThread::currentThread() << " started";
// Code to execute
qDebug() << QThread::currentThread() << " finished";
}
我什至读到quit()
强制线程停止,所以只是为了测试我尝试切换quit()
,wait()
就像这样
myThread->quit();
myThread->wait(); // Never returns from this either
myThread->deleteLater();
我什至尝试循环isRunning()
函数而不是wait()
但我得到了相同的结果
while(myThread->isRunning()) // Same goes for !isFinished()
{
// Do nothing
}
似乎无论线程如何,它都不知道它已经完成。
我可以做些什么来解决这个问题或检查为什么会发生这种情况?