何时使用 QThread::exec()

5 c++ qt multithreading

我检查了令人满意的解释但找不到。通常文档提到,为了在线程之间使用信号/槽,我们需要使用事件循环并通过调用 exec 来启动它们。

但是我可以看到,即使不使用 exec(),我仍然可以发送信号并跨线程处理它们。

它的具体用途是什么?

Tho*_*omi 4

QThread::exec()当您想要运行 Qt 在 QThread 类中为您提供的事件循环时使用。如果您不调用 exec(),则需要创建自己的事件循环来处理 Qt 事件(即,如果您希望信号/槽起作用)。除非您有非常具体的需求,否则这几乎肯定是超出其价值的工作。

你说你仍然可以发送信号/槽?我的猜测是你实际上并没有在不同的线程上运行任何东西。这是使用 QThread 时非常常见的问题。在您认为在不同线程上运行的代码中放置一个断点,然后查看堆栈跟踪 - 您可能会感到震惊!