在我的代码中,工作线程发出信号。
来自Qt Docs:
Qt :: BlockingQueuedConnection - 与QueuedConnection相同,但当前线程阻塞直到槽返回。此连接类型仅应在发射器和接收器位于不同线程中的情况下使用。 注意:违反此规则可能会导致应用程序死锁。
如何确定发射器和接收器何时处于不同的线程中。我对此有一些模糊的想法,因为我的应用程序出现问题,直到我添加了Qt::BlockingQueuedConnection
标志。但是知道我的应用程序不想关闭。它坚持工作线程。
更新
我更多地调查了这个问题。线程被发出的信号阻塞。因为当我关闭应用程序时,插槽(在MainWindow中)被破坏,并且发出信号会产生这种死锁。
如何解决这个问题?
答案 0 :(得分:3)
通常,您只需知道您创建对象的位置以及是否使用QObject::moveToThread
。如果要以编程方式检查它,可以执行以下操作:
Qt::ConnectionType type = Qt::AutoConnection;
if (sender->thread() != receiver->thread())
type = Qt::BlockingQueuedConnection;
您的程序可能无法关闭,因为您不会退出所有线程。你应该在关闭事件中为每个人打电话QThread::quit
。