QThread的使用要點和例子

2021-07-24 02:44:11 字數 2384 閱讀 4815

程式實現多執行緒的作用這裡就不贅述了,這裡主要介紹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 定時器停止執行.大概實...