2
目前我需要實現一個基於Qt的多線程算法。也許我應該嘗試延長QThread
。 但在此之前,我想問一下,如果我可以只使用兩個QTimer
和timer1
,timer2
,並分別將它們的超時信號連接到線程,以實現一個「假」多線程程序?我可以使用QTimer實現多線程算法嗎?
目前我需要實現一個基於Qt的多線程算法。也許我應該嘗試延長QThread
。 但在此之前,我想問一下,如果我可以只使用兩個QTimer
和timer1
,timer2
,並分別將它們的超時信號連接到線程,以實現一個「假」多線程程序?我可以使用QTimer實現多線程算法嗎?
您可以將QTimer
的timeout()信號連接到相應的插槽,並調用start()
。從此,定時器將以固定的時間間隔發出timeout()信號。但是這兩個定時器在主線程和主事件循環中運行。所以你不能稱它爲多線程。因爲這兩個插槽不能同時運行。他們一個接一個地運行,如果阻塞主線程,另一個將永遠不會被調用。
您可以通過具有不同的任務一些類,應同時進行,並使用QObject::moveToThread
更改該對象的線程親和力有一個真正的多線程應用程序:從QObject
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()));
connect(thread2, SIGNAL(finished()), task2, SLOT(deleteLater()));
connect(thread2, SIGNAL(finished()), thread2, SLOT(deleteLater()));
thread1->start();
thread2->start();
注意Task1
和Task2
繼承。