標籤: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給主介面,我之前用的是訊號槽)