Multithreading QThread事件循环和无限工作循环

Multithreading QThread事件循环和无限工作循环,multithreading,qt,Multithreading,Qt,我需要在一个线程中进行无限循环。 作者在书中写道 >you should never ever block the event loop 因为它会阻塞信号槽的概念。如何在QThread中使用事件循环和无限循环?调用应该可以工作,但更好的解决方案可能是使用事件循环,而不是强制线程继续运行。QThread是线程的“控制器”。它的事件循环不会因为QObject执行无限循环而阻塞。当然,除非您在QThread子类中实现无限循环 在你的情况下,你不必这么做。相反,只需在QObject子类中实现无

我需要在一个线程中进行无限循环。 作者在书中写道

 >you should never ever block the event loop
因为它会阻塞信号槽的概念。如何在
QThread
中使用事件循环和无限循环?

调用应该可以工作,但更好的解决方案可能是使用事件循环,而不是强制线程继续运行。

QThread是线程的“控制器”。它的事件循环不会因为QObject执行无限循环而阻塞。当然,除非您在QThread子类中实现无限循环

在你的情况下,你不必这么做。相反,只需在QObject子类中实现无限循环,然后将该QObject移动到具有。这样,无限循环就不会阻塞QThread的事件循环


而且,像往常一样:.

循环总是可以被多次调用的函数替换(尽管它并不总是方便)。创建一个插槽并将
QTimer
连接到该插槽。让函数进行工作的迭代

timer = new QTimer();
connect(timer, SIGNAL(timeout()), this, SLOT(iteration()));
timer->start(50); 

void MyClass::iteration() {
  if (!timer->isActive()) { return; }
  //do something
}

如果要停止循环,请调用
timer->stop()

如何在不阻塞事件循环的情况下正确暂停/恢复线程?“它将阻塞信号槽概念”并没有真正解析。无论如何,我在下面写了为什么这是个坏主意,它与线程无关:“由于事件交付受阻,小部件无法自我更新,无法与小部件进行进一步的交互,计时器无法启动,网络通信将减速并停止。此外,许多窗口管理器会检测到您的应用程序不再处理事件,并告诉用户您的应用程序没有响应”。在您的情况下,这只是意味着您的线程不会为该线程中的对象分派事件。