我需要在线程中创建无限循环的工作。在这篇文章中,作者写道:
>you should never ever block the event loop
因为这会阻塞信号槽的概念。我如何在QThread
中使用事件循环加无限循环?
我需要在线程中创建无限循环的工作。在这篇文章中,作者写道:
>you should never ever block the event loop
因为这会阻塞信号槽的概念。我如何在QThread
中使用事件循环加无限循环?
QThread是线程“控制器”。当你的QObject执行无限循环时,它的事件循环不会阻塞,除非你在QThread子类中实现了该无限循环。
在你的情况下,你不需要这样做。相反,只需在QObject子类中实现无限循环,然后使用QObject :: moveToThread()将该QObject移动到线程中。这样你的无限循环就不会阻塞QThread的事件循环。
并且,一如既往:如何真正使用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()
。