QT中多執行緒QWaitCondition例子解析

2021-07-14 14:26:01 字數 1830 閱讀 7374

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include #include #include #include qmutex mutex;

qwaitcondition waitcon;

int number=6;

int count=0;

void mythreada::run()

waitcon.wakeall();

//單執行緒執行 整個程式是乙個單執行緒

//單執行緒執行 整個程式是乙個單執行緒

}mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent),

ui(new ui::mainwindow)

mainwindow::~mainwindow()

void mainwindow::on_pushbutton_clicked()

; uint colormap[colormapsize];

};//! [0]

#endif // renderthread_h

renderthread.cpp

#include "renderthread.h"

#include #include //! [0]

renderthread::renderthread(qobject *parent)

: qthread(parent)

renderthread::~renderthread()

//! [1]

//! [2] -- 給執行緒 renderthread 傳值 同時開始讓執行緒開始執行 -- 此為在主線程中

void renderthread::render(qstring str1, qstring str2)

if (restart) //! 如果重啟,跳出迴圈

{qdebug()<<"renderthread::run()-- restart - "<

呼叫方:

void mainwindow::on_pushbutton_clicked()

{ qt::handle h = qthread::currentthreadid();

qdebug()<<"on_pushbutton_clicked "《下面是效果圖:

on_pushbutton_2_clicked 0x3b08

condition.wakeall(); 0x3b08

renderthread::run()-- restart - "22222" "bbbbtttt" 0x36f0

renderthread::run()----- "22222" "bbbbtttt" 0x36f0

on_pushbutton_clicked 0x3b08

condition.wakeall(); 0x3b08

renderthread::run()-- restart - "1111" "bbbb" 0x36f0

renderthread::run()----- "1111" "bbbb" 0x36f0

on_pushbutton_2_clicked 0x3b08

condition.wakeall(); 0x3b08

renderthread::run()-- restart - "22222" "bbbbtttt" 0x36f0

renderthread::run()----- "22222" "bbbbtttt" 0x36f0

qt 多執行緒

qt通過三種形式提供了對執行緒的支援。它們分別是,一 平台無關的執行緒類,二 執行緒安全的事件投遞,三 跨執行緒的訊號 槽連線。這使得開發輕巧的多執行緒qt程式更為容易,並能充分利用多處理器機器的優勢。多執行緒程式設計也是乙個有用的模式,它用於解決執行較長時間的操作而不至於使用者介面失去響應。在qt...

Qt 多執行緒

qt 包含下面一些執行緒相關的類 qthread 提供了開始乙個新執行緒的方法 qthreadstorage 提供逐執行緒資料儲存 qmutex 提供相互排斥的鎖,或互斥量 qmutexlocker 是乙個便利類,它可以自動對 qmutex 加鎖與解鎖 qreadwriterlock 提供了乙個可以...

Qt多執行緒

今天學習qt的多執行緒,在學習多執行緒主要是兩個方面。一是多執行緒的基礎概念,二是多執行緒的同步,三是怎麼和主線程進行通訊。在這個主線程上面可以開始由qthread建立的物件的新的執行緒。這些由qthread建立的物件的新的執行緒之間的通訊,是通過使用含有互斥量,讀寫鎖,訊號量或者等待條件的共享變數...