1)新建工程後,新增執行緒類mythread,基類為qobject;
#ifndef mythread_h
#define mythread_h#include
class mythread : public
qobject
;#endif
//mythread_h
#include "
mythread.h
"#include
#include
mythread::mythread(qobject *parent) : qobject(parent)
void
mythread::mytimeout()
}void mythread::setflag(bool
flag)
2)在主線程中啟動子執行緒
//主線程標頭檔案#ifndef mywidget_h
#define mywidget_h#include
#include
"mythread.h
"#include
namespace
ui class mywidget : public
qwidget
;#endif
//mywidget_h
//主線程cpp#include "
mywidget.h
"#include
"ui_mywidget.h
"#include
mywidget::mywidget(qwidget *parent) :
qwidget(parent),
ui(newui::mywidget)
mywidget::~mywidget()
void
mywidget::dealclosewnd()
void mywidget::dealsignal(int *a)
void
mywidget::on_startbutton_clicked()
//啟動執行緒,但是沒有啟動執行緒處理函式
thread->start();
//不能直接呼叫執行緒處理函式
//直接呼叫,導致執行緒處理函式和主線程是在同乙個執行緒
//myt->mytimeout();
myt->setflag(false
); emit startthread();
}void
mywidget::on_stopbutton_clicked()
//通過使用flag標誌控制線程停止
myt->setflag(true
); thread->quit();
thread->wait();
}
需要注意:1)例子中通過使用flag標誌在控制線程函式的啟動和停止,如果不使用該標誌位控制線程,當呼叫thread->quit()和thread->wait()後執行緒函式仍然在執行,原因是在執行thread->quit()和thread->wait()後,只用執行緒函式的任務處理完後,執行緒函式才會停止工作,而執行緒函式為死迴圈,所以會一直執行下去。同樣道理在視窗關閉時也需要使用標誌停止執行緒函式。
2)啟動執行緒必須使用訊號-槽方式,不能直接呼叫執行緒處理函式;
3)執行緒類可以定義多個函式,但是有且只能有乙個執行緒處理函式,本例中
void mythread::mytimeout();
Qt 中的多執行緒 二
可重入與執行緒安全 在qt文件中,術語 可重入 與 執行緒安全 被用來說明乙個函式如何用於多執行緒程式。假如乙個類的任何函式在此類的多個不同的例項上,可以被多個執行緒同時呼叫,那麼這個類被稱為是 可重入 的。假如不同的執行緒作用在同乙個例項上仍可以正常工作,那麼稱之為 執行緒安全 的。大多數c 類天...
Qt 中的多執行緒 二
可重入與執行緒安全 在qt文件中,術語 可重入 與 執行緒安全 被用來說明乙個函式如何用於多執行緒程式。假如乙個類的任何函式在此類的多個不同的例項上,可以被多個執行緒同時呼叫,那麼這個類被稱為是 可重入 的。假如不同的執行緒作用在同乙個例項上仍可以正常工作,那麼稱之為 執行緒安全 的。大多數c 類天...
Qt 中的多執行緒 二
可重入與執行緒安全 在qt文件中,術語 可重入 與 執行緒安全 被用來說明乙個函式如何用於多執行緒程式。假如乙個類的任何函式在此類的多個不同的例項上,可以被多個執行緒同時呼叫,那麼這個類被稱為是 可重入 的。假如不同的執行緒作用在同乙個例項上仍可以正常工作,那麼稱之為 執行緒安全 的。大多數c 類天...