1

在我的代码中,一个工作线程发出一个信号。

来自Qt 文档

Qt::BlockingQueuedConnection - 与 QueuedConnection 相同,除了当前线程阻塞直到槽返回。这种连接类型应该只用于发射器和接收器在不同线程中的情况。注意:违反此规则可能会导致您的应用程序死锁。

如何确定发射器和接收器何时在不同的线程中。Qt::BlockingQueuedConnection我对此有一些模糊的想法,因为在我添加标志之前我的应用程序有问题。但知道我的应用程序不想关闭。它被工作线程卡住了。

更新:

我对问题进行了更多调查。线程被发出的信号阻塞。因为当我关闭应用程序时,插槽(在 MainWindow 中)被破坏,并且发出信号会产生这个死锁。

如何解决这个问题?

4

1 回答 1

3

通常,您只知道在哪里创建了对象以及是否使用了QObject::moveToThread. 如果你想以编程方式检查它,你可以这样做:

Qt::ConnectionType type = Qt::AutoConnection;
if (sender->thread() != receiver->thread())
    type = Qt::BlockingQueuedConnection;

您的程序可能不会关闭,因为您没有退出所有线程。您应该QThread::quit在关闭事件中调用它们中的每一个。

于 2013-05-24T05:23:35.083 回答