QThread总是处于等待状态



我正在尝试使用QThread来调用另一个线程中的函数,而不需要冻结UI。我在windowslinux上都使用QT5.11.2

在windows上一切都很好,但QThread的wait((函数无论如何都不会返回。

我在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
}

似乎不管怎样,这根线都不知道它已经完成了。

我能做些什么来解决这个问题或检查为什么会发生这种情况?

  1. 您还没有start()线程
  2. gui线程中的myThread->wait();等待线程终止,因此它阻止了gui线程事件循环,因此您失去了这种线程方式的所有好处,还不如只执行Configure(value);而不执行线程

文档说明:

wait((和sleep((函数在一般来说,因为Qt是一个事件驱动的框架。而不是wait((,考虑监听finished((信号。而不是sleep((函数,请考虑使用QTimer。

相关内容

  • 没有找到相关文章

最新更新