QThread中的事件迴圈

2021-07-09 05:17:09 字數 905 閱讀 3385

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...