Qt子執行緒呼叫定時器

2021-10-12 22:07:26 字數 2180 閱讀 9480

qt作為人機互動介面開發的主流工具,在工業控制領域也得到了廣泛的應用。工業控制中,需要對大量的實時資料讀取、顯示、計算和儲存,在乙個執行緒中實現這些功能,很有可能會造成介面卡死的情況。本文介紹一種不需要重寫子執行緒類的簡單方法,希望能給讀者一些啟發。初學qt,還在摸索中,所說內容難免有錯誤和不準確的地方,請大家多多指教。

編譯環境:qt5.9.8 qt creator 4.8.2 (32位)

1.在標頭檔案中宣告定時器指標變數和執行緒指標變數;

2.在建構函式中例項化時不指定父物件;

3.將定時器通過movetothread的方式轉移到子執行緒中;

4.將執行緒開啟的訊號和定時器開啟的槽函式相連;

5.將定時器和對應的槽函式相連;

6.注意:連線定時器和槽函式時,不能使用預設的連線方式,應使用qt::directconnection直接連線的方式。直接連線表示槽函式和訊號發出者處於同乙個執行緒中,只有這樣才可以完成在子執行緒中使用定時器的槽函式;

7.ps:connect第5個引數為預設的佇列方式,是為不同執行緒設計的。

**如下:

timer0 = new qtimer;

//動態分配記憶體的方法,不指定父物件

timer0thread0 = new qthread;

//動態分配記憶體,不指定父物件

timer0->

settimertype

(qt:

:precisetimer)

;//設定精確的定時器

timer0->

setinterval

(1000);

//每隔1秒觸發一次定時器

timer0->

movetothread

(timer0thread0)

;//將定時器轉移到子執行緒中

connect

(timer0thread0,

signal

(started()

),timer0,

slot

(start()

));//執行緒開啟同時啟動執行緒中的定時器

connect

(timer0,

signal

(timeout()

),this,

slot

(timer0outslot()

),qt:

:directconnection)

;//子執行緒給主線程發訊號

1.通過帶形參的訊號和槽完成執行緒間的資訊傳遞;

2.注意:在建構函式中訊號和槽函式的括號中不能寫實參,只寫變數型別就好,否則會報錯。

**如下:

connect

(this,

signal

(senddata

(const qstring)

),this,

slot

(receivedataandshow

(const qstring)))

;//通過訊號和槽的方式從子執行緒向主線程傳資料

1.cpp程式中完成程式如下:

**如下:

#include

"widget.h"

#include

"ui_widget.h"

widget:

:widget

(qwidget *parent)

:qwidget

(parent),ui

(new ui:

:widget)

widget::~

widget()

delete timer0;

delete timer0thread0;

delete ui;

}void widget:

:timer0outslot()

void widget:

:on_pushbuttonstart_clicked()

}void widget:

:on_pushbuttonstop_clicked()

}void widget:

:on_pushbuttonclear_clicked()

void widget:

:receivedataandshow

(const qstring &text)

Qt 執行緒與定時器

我寫的簡單測試 the qtimer class provides repetitive and single shot timers.上面這段話摘自qt助手文件,我們使用qtimer類定義乙個定時器,它可以不停重複,也可以只進行一次便停止。使用起來也很簡單 qtimer timer newqtim...

執行緒定時器

定時器 timer類 schedule timertask物件,時間 定時排程 時間一到,他會執行timertask物件裡面的run方法。例項 10秒後該run方法執行 public class traditionaltimertest 1 0000 這個時間也可以設定成乙個具體時間,比如幾月幾號幾...

Qt之定時器

qt中定時器的使用有兩種方法,一種是使用qobject類提供的定時器,還有一種就是使用qtimer類。定時器類qtimer提供當定時器觸發的時候發射乙個訊號的定時器,它提供只觸發一次的超時事件。1 啟動定時器 int m timerid starttimer 300 啟動乙個qtimer型別的定時器...