目前,我需要实现一个基于Qt的多线程算法。也许我应该尝试扩展 QThread 。但在此之前,我想问一下,我是否可以使用两个 QTimer 的 timer1 , timer2 ,并将它们的超时信号分别连接到线程,来实现一个“假的”多线程程序?
QThread
QTimer
timer1
timer2
发布于 2014-06-23 03:38:47
您可以将 QTimer 的timeout()信号连接到适当的时隙,并调用 start() 。从那时起,计时器将以固定的间隔发出timeout()信号。但是这两个定时器在主线程和主事件循环中运行。所以你不能叫它多线程。因为这两个插槽不能同时运行。它们一个接一个地运行,如果一个阻塞主线程,另一个就永远不会被调用。
start()
通过为应该并发执行的不同任务设置一些类,并使用 QObject::moveToThread 更改对象的线程关联,您可以拥有一个真正的多线程应用程序:
QObject::moveToThread
QThread *thread1 = new QThread(); QThread *thread2 = new QThread(); Task1 *task1 = new Task1(); Task2 *task2 = new Task2(); task1->moveToThread(thread1); task2->moveToThread(thread2); connect( thread1, SIGNAL(started()), task1, SLOT(doWork()) ); connect( task1, SIGNAL(workFinished()), thread1, SLOT(quit()) ); connect( thread2, SIGNAL(started()), task2, SLOT(doWork()) ); connect( task2, SIGNAL(workFinished()), thread2, SLOT(quit()) ); //automatically delete thread and task object when work is done: connect( thread1, SIGNAL(finished()), task1, SLOT(deleteLater()) ); connect( thread1, SIGNAL(finished()), thread1, SLOT(deleteLater()) );