1 背景
據qthread的官方文件說明,可以通過2中方式來實現乙個執行緒,其中一種方法就是繼承qthread並且實現其中的run()函式:
class workerthread : public qthread
};
通過start()來啟動workerthread的例項,將會使得run()在乙個新執行緒中執行。
2 何時終止
當上述的run()函式執行完畢時候,新執行緒也就結束了,並且發出finished()訊號。
3 事件迴圈
然而,有時候我們並不希望執行緒終止,而是希望它原地待命。這時候需要它進入事件迴圈(否則不能接受訊息)。根據qthread的官方文件解析,需用在run()中呼叫exec()使其進入事件迴圈:
class workerthread : public qthread
};
這樣子,新執行緒就不會因為run()的結束而退出,而是一直在等待事件。可以通過向其傳送訊號,使其執行指定的工作(在新執行緒中)。
參考資料
[1]qt執行緒和定時器
[2]qt 的執行緒與事件迴圈
QT中的執行緒QThread
譯文如下 class worker public qobject signals void resultready const qstring result class controller public qobject controller public slots void handleresu...
前端中的事件迴圈eventloop機制
我們知道 js 是單執行緒執行的,那麼非同步的 js 是怎麼處理的呢?例如下面的 是如何進行輸出的 console.log 1 settimeout function 0 new promise function resolve then function console.log 5 settime...
QTimer在QThread環境中失效的問題
qtimer在非qthread的環境下能正常工作。但在qthread環境下,需要做一些改動才能正常工作。建立qt的執行緒有兩種方式 1.子例化qthread 可以在虛函式run中啟動定時器,大致的 如下 建構函式,繼承qthread thread thread qobject parent qthr...