Qt多執行緒(二)

2022-07-23 06:54:13 字數 1776 閱讀 1456

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 類天...