QT多線程及通過事件進行通訊(通過自訂事件,然後QApplication::postEvent給主介面,我之前用的是訊號槽)

來源:互聯網
上載者:User

標籤:return   post   public   ted   訊號槽   this   線程間通訊   跨平台   檔案   

可以通過QThread實現跨平台的多線程開發,Qt庫負責在特定平台上的特定多線程實現。要採用QThread進行多線程開發,首先需要包含標頭檔:

#include <QThread>然後需要從QThread繼承一個自己的線程類,暫作MyThread,關鍵是要實現QThread內的一個虛函數run。在run函數內部,最後一般都調用exec(),使得線程進入事件迴圈,否則線程主函數run運行結束,線程也就退出了。class MyThread : public QThread{public:   MyThread();public:   Dialog *parent;public:   void run();};其中,parent儲存的是建立該線程的視窗,也就是該線程的父線程,主要用於該子線程向父線程發送特定事件,以便進行線程間通訊。 自訂訊息首先需要包含標頭檔:#include <QEvent>然後定義自己的事件值:const QEvent::Type MyEvent = (QEvent::Type)1234;然後在run函數裡面(實際上是指在任何你想要和父線程進行通訊的地方,我這裡簡化為就是在run函數內部了)通過:QApplication::postEvent(parent, new QEvent(MyEvent));將該事件發送出去。父線程內通過改寫虛函數event,來使得能夠捕獲訊息:bool Dialog::event(QEvent *event){   if (event->type() == MyEvent)   {      QMessageBox::information(this, "INFORMATION", "This is son sented signal!");      return true;   }   return QWidget::event(event);}這樣,兩個線程就能夠同時運行並能夠進行線程間通訊了。

http://www.cnblogs.com/bingcaihuang/archive/2011/03/16/1985971.html

QT多線程及通過事件進行通訊(通過自訂事件,然後QApplication::postEvent給主介面,我之前用的是訊號槽)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.