Qt多執行緒1

2021-09-30 01:56:40 字數 2297 閱讀 6411

qt的多執行緒對於設計並行程式來說很有幫助,但是多執行緒因為其固有的一些特性,會導致程式會出現各種隱患,尤其是類設計不好的時候尤為嚴重。

這裡我們將詳細介紹一下qt的多執行緒技術,包括如何製作乙個執行緒安全的類。

首先我們先寫乙個簡單的例子:

首先,我們再次使用乙個類debugtext ,該類繼承自debugwidget類:

#pragma once

#ifndef _debugwidget_h__

#define _debugwidget_h__

#include #include #include #include class debugwidget : public qwidget ;

#endif

#include "debugwidget.hpp"

#include #include #include #include #include debugwidget::debugwidget(qwidget * parent) : qwidget(parent)

debugwidget::~debugwidget()

#include #include #include #include "debugwidget.hpp"

class debugtext : public debugwidget ;

extern debugtext *dt;

#endif

#include "debugtext.hpp"

#include "debugwidget.hpp"

#include #include #include #include #include static debugtext *dt = null;

debugtext::debugtext(debugwidget * parent) : debugwidget(parent)

debugtext::~debugtext()

void debugtext::addcontents(const qstring& s1)

debugtext* debugtext::getdebugtext()

該類是自己定義的輸出類,作用是開乙個視窗,然後在上面顯示東西。該類在前面自定義偵錯程式的部分已經說過了。

我們的多執行緒方式採用繼承多執行緒類,然後裡面的run,即在另乙個執行緒裡啟動的函式。注意該函式不用直接呼叫,直接使用qthread::start(),就會自動呼叫該函式。

#pragma once

#ifndef __multithread_h__

#define __multithread_h__

#include class multithread : public qthread ;

#include "multithread.hpp"

#include "debugtext.hpp"

multithread::multithread(qobject * parent) : qthread(parent)

multithread::~multithread()

void multithread::run()

}

注意,debugtext類只是乙個普通的類,它並沒有任何使用多執行緒的機制。

#include "multithread.hpp"

int main(int argc, char *ar**)

return a.exec();

}

然後執行。驚喜發生了:記憶體訪問出錯。

這是為什麼呢?因為我們的debugtext的核心函式就是在textedit控制項裡新增顯示字串,而如果兩個執行緒同時去訪問了這個物件,則就會出現訪問錯誤的情況。

我們改改主函式:

#include "multithread.hpp"

int main(int argc, char *ar**)

mythread.start();

//qthread::sleep(100);

return a.exec();

}

這樣,就可以發現,我們先列印了一堆bbbbbbb,然後又列印了一堆aaaaaaa,

但是這樣好像並沒有什麼意義,因為我們是想同時讓bbbbbbb和aaaaaaaa被列印出來。否則就是先執行乙個再執行另乙個,這就不是多執行緒了。

為了實現可以多個執行緒同時呼叫debugtext,我們必須對這個debugtext加入多執行緒的機制,這會在下一節進行介紹。

Qt多執行緒筆記 (1)

需求 針對每個 dat檔案開闢乙個執行緒,用於處理相應的事務 將第一行資料用第二行來替換 先貼自己弄的方法,拋磚引玉 mainwindow.h ifndef mainwindow h define mainwindow h include include include include includ...

qt 多執行緒

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

Qt 多執行緒

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