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