QT多線程及通過事件進行通信(通過自定義事件,然后QApplication::postEvent給主界面,我之前用的是信號槽)


可以通過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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM