QThread與其他執行緒間相互通訊

2021-08-25 06:32:06 字數 1486 閱讀 8014

qthread的用法其實比較簡單,只需要派生乙個qthread的子類,實現其中的run虛函式就大功告成, 用的時候建立該類的例項,呼叫它的start方法即可。但是run函式使用時有一點需要注意,即在其中不能建立任何gui執行緒(諸如新建乙個qwidget或者qdialog)。如果要想通過新建的執行緒實現乙個gui的功能,那麼就需要通過使用執行緒間的通訊來實現。這裡使用乙個簡單的例子來理解一下 qthread中signal/slot的相關用法。

首先,派生乙個qthread的子類

mythread.h

view plain

copy to clipboard

print?

class

mythread:

public

qthread;

void send(qstring s)就是定義的訊號

mythread.cpp

view plain

copy to clipboard

print?

#include"mythread.h"

mythread::mythread()

void

mythread::run()

exec();}

emit send("this is the son thread") 為發射此訊號,在run中迴圈傳送,每次休眠五秒

之後我們需要在另外的執行緒中定義乙個slot來接受mythread發出的訊號。如新建乙個mywidget

mywidget.h

view plain

copy to clipboard

print?

class

mywidget:

public

qwidget;

void receiveslot(qstring s)就用來接受發出的訊號,並且實現引數的傳遞。

mywidget.cpp

view plain

copy to clipboard

print?

#include"mywidget.h"

mywidget::mywidget(qwidget*parent):qwidget(parent)

mywidget::~mywidget()

void

mywidget::receiveslot(qstrings)

接受函式實現彈出發送訊號中所含引數(qstring型別)的訊息框

在main()函式中建立新執行緒,來實現兩個執行緒間的互動。

main.cpp

view plain

copy to clipboard

print?

#include

#include"mywidget.h"

intmain(

intargc,

char

*argv)

執行後,當mywidget彈出後,子執行緒mythread每隔5s即會彈出乙個提醒視窗,執行緒間通訊就此完成。

QThread與其他執行緒間相互通訊

qthread的用法其實比較簡單,只需要派生乙個qthread的子類,實現其中的run虛函式就大功告成,用的時候建立該類的例項,呼叫它的start方法即可。但是run函式使用時有一點需要注意,即在其中不能建立任何gui執行緒 諸如新建乙個qwidget或者qdialog 如果要想通過新建的執行緒實現...

QThread與其他執行緒間相互通訊

qthread的用法其實比較簡單,只需要派生乙個qthread的子類,實現其中的run虛函式就大功告成,用的時候建立該類的例項,呼叫它的start方法即可。但是run函式使用時有一點需要注意,即在其中不能建立任何gui執行緒 諸如新建乙個qwidget或者qdialog 如果要想通過新建的執行緒實現...

C 泛型與其他型別的相互轉換

泛型類及型別轉換 泛型類 public class mytemplate t 設計乙個泛型類 public void t s 內容相連或者相加 else if s is string 字串相連 else if s is double 浮點數相加 else if s is bool bool型求或 p...