我在使用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)