小编Kan*_*oge的帖子

如果不使用直接连接,QThread :: wait()不会返回

我在使用Qt Threads和Connections时遇到了麻烦.我找到了关于这个主题的几个教程和讨论,我按照本教程创建了线程.但是我仍然遇到了问题,在线程上调用wait()永远不会返回并且UI冻结.

之前有一个类似的问题(第二个例子): 线程之间的Qt连接类型:为什么这有效?

在该问题的最后一次编辑中,作者提到他已经造成了僵局.我假设,我在我的应用程序中也这样做.但我仍然不明白,为什么会这样.阅读建议的文章并没有帮助我理解.我只是明白了,死锁可能发生,但我不知道,是什么导致它或在我的情况下.

我还创建了一个简化为核心问题的例子.找到这个问题底部的代码.

所以我的问题是:我的例子中死锁的原因是什么?是否有解决方案而不使连接成为直接连接?

我真的很感激任何提示.

谢谢!

编辑:

由于注释我试图通过信号发送停止请求,我在线程循环中添加了一个QCoreApplication :: processEvents()调用.但主要问题仍然是一样的.

EDIT2:

在考虑了更多关于事件循环之后,我找到了一个可接受的解决方案:

thread.requestStop();

// now instead of using wait(), we poll and keep the event loop alive
// polling is not nice, but if it does not take a very long time
// for the thread to finish, it is acceptable for me.
while (thread.isRunning())
{
    // This ensures that the finished() signal
    // will be processed by the thread object
    QCoreApplication::processEvents();        
} …
Run Code Online (Sandbox Code Playgroud)

c++ qt qthread qt5 qtcore

5
推荐指数
1
解决办法
1602
查看次数

标签 统计

c++ ×1

qt ×1

qt5 ×1

qtcore ×1

qthread ×1