程式實現多執行緒的作用這裡就不贅述了,這裡主要介紹qt多執行緒。qt使用多執行緒非常方便,用qthread類能非常方便地操作執行緒,配合qt特色的訊號和槽機制(signal-slot)和qmutex類鎖即可完成各種跨執行緒的操作。
首先需要包含標頭檔案qthread:
#include
新建乙個qthread與新建乙個變數類似:
qthread mythread;
那麼如何把需要執行程式放入新建的執行緒呢?我們可以新建乙個名為myobject的類:
#include
#include
#include
class myobject : public qobject ;
~myobject() {}
public slots:
void
show()
};
接著在mainwindow.cpp的mainwindow構建函式中呼叫:
qthread * mythread = new qthread;
my = new myobject;
my->movetothread(mythread);
mythread->start();
connect(mythread, signal(started()), my, slot(first()));
這樣my這個myobject類的槽函式show()就會在新建的mythread執行緒中執行。
然而,以下還有一種更實用的方法,由於比較長,直接上原始碼,後面會解釋:
thread.h
#ifndef thread_h
#define thread_h
#include
#include
#include
class thread : public qthread
;#endif // thread_h
thread.cpp
#include
"thread.h"
thread
::thread()
void
thread
::run()
stopped =
false;
}void
thread
::stop()
void
thread
::printmessage()
以上的**新建了乙個thread類,並且過載了run()函式,需要在新執行緒中執行的**放在run()中。使用時,在mainwindow類中定義乙個thread成員,接著在需要的地方呼叫start()即可:
mainwindow.h
#ifndef mainwindow_h
#define mainwindow_h
#include
#include
#include
#include
namespace ui
class mainwindow : public qmainwindow
;#endif // mainwindow_h
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
mainwindow::mainwindow(qwidget *parent) :
qmainwindow(parent),
ui(new ui::mainwindow)
mainwindow::~mainwindow()
這樣就會不斷輸出hello.
新建的qthread變數可以理解為管理我們新建的執行緒的類,它本身仍然在原執行緒裡,run()函式裡的內容才是新執行緒。
基於第一點,我們自己定義的thread類中如果有槽函式,這個槽函式將在原執行緒而非新執行緒中執行,請務必注意!
qthread的安全銷毀需要在mainwindow.cpp包含標頭檔案:
#include
並且在mainwindow.cpp中過載:
protected:
void
closeevent(qcloseevent *event);//過載,防止執行緒駐留在系統
他的函式定義為:
void mainwindow::closeevent(qcloseevent *event)
QThread的使用總結
bradley t.hughes 認為 qthread 應該被看做是作業系統執行緒的介面或控制點,而不應該包含需要在新執行緒中執行的 需要執行的 應該放到乙個qobject的子類中,然後將該子類的物件movetothread到新執行緒中。public slots void emitsig signa...
QThread類的使用
概述 ifndef myclass h define myclass h include include class myclass public qthread endif myclass h myclass.cpp檔案 include myclass.h include myclass mycl...
QThread和QTimer的使用方法
說明 1 一下小結不保證對,如果錯誤希望指正 2 queue和direc代表是的connect的鏈結方式,qt directconnection和qt queuedconnection 小結 我想實現的乙個小定時器程式 輸入s start 定時器啟動,列印資訊。輸入e end 定時器停止執行.大概實...