有乙個想法,乙個客戶端,有gui介面的同時也要向網路伺服器傳送本地採集的資料,通過網路傳送資料的介面是同步阻塞的,需要等待伺服器響應資料。
如果不採用後台執行緒的方案,用主ui執行緒關聯乙個定時器qtimer來做定時任務傳送,那麼gui介面會由於定時器事件響應的槽函式的阻塞,導致整個gui的按鈕事件在某些時刻無法及時響應,會有卡頓的情況。
所以,後台需要執行乙個後台執行緒,與主線程分離,並且該後台執行緒需要關聯乙個自己的qtimer,來做定時任務資料採集。
方案其實可以用qthread來做,首先,做乙個task class:
1 #include 2 #include 34class mytaskclass : public
qobject516
public
slots:
17void
datacollectionsendtask()
1821
private:22
qtimer m_task_timer;
2324
25 };
然後建立乙個qthread執行緒,把整個mytaskclass類的例項move到執行緒中就可以了:
mytaskclass.hpp"4
5int main(int argc, char *ar**)6
以上**就不會阻塞gui執行緒了。乙個後台執行緒有乙個自己的定時器。
references:
Qt中UI執行緒與子執行緒的互動
gui框架一般只允許ui執行緒操作介面元件,qt也是如此。但我們的應用程式一般是多執行緒的,勢必就涉及到ui執行緒與子執行緒的互動。下面介紹常用的ui執行緒與子執行緒互動方式,並附上自己的demo。qt中提供了一些執行緒安全的方法來讓我們使用 a.使用訊號槽 qt的訊號槽是執行緒安全的。connec...
Qt多執行緒程式設計中的物件執行緒與函式執行執行緒
為了更清楚的理解這些問題,在此特編了個小例子說明一下。首先定義乙個從qobject繼承的類someobject,包含乙個訊號somesignal和乙個成員函式callemitsignal,此函式用於傳送前面的somesignal訊號。定義如下 define object class class so...
Qt多執行緒程式設計中的物件執行緒與函式執行執行緒
2017 05 10 16 40 25人閱讀收藏 編輯刪除 qt 24 作者同類文章x 而對於伺服器來說,多執行緒的這個特性太有用了,因為多執行緒使得伺服器可能同時響應多個客戶端的請求,所以現在伺服器大多採用多執行緒,所以才會造成我開始的誤解。不管是多執行緒,還是伺服器,qt中已經封裝好了特定的類,...