qt通過三種形式提供了對執行緒的支援。它們分別是,一、
平台無關的執行緒類,二、
執行緒安全的事件投遞,三、
跨執行緒的訊號-槽連線。這使得開發輕巧的多執行緒qt程式更為容易,並能充分利用多處理器機器的優勢。多執行緒程式設計也是乙個有用的模式,它用於解決執行較長時間的操作而不至於使用者介面失去響應。在qt的早期版本中,在構建庫時有不選擇執行緒支援的選項,從4.0開始,執行緒總是有效的。
執行緒類
qthread 提供了開始乙個新執行緒的方法
qthreadstorage 提供逐執行緒資料儲存
qmutex 提供相互排斥的鎖,或互斥量
qmutexlocker 是乙個便利類,它可以自動對
qmutex加鎖與解鎖
qreadwriterlock 提供了乙個可以同時讀操作的鎖
qreadlocker與
qwritelocker 是便利類,它自動對
qreadwritelock加鎖與解鎖
qsemaphore 提供了乙個整型訊號量,是互斥量的泛化
qwaitcondition 提供了一種方法,使得執行緒可以在被另外執行緒喚醒之前一直休眠。
建立乙個執行緒
為建立乙個執行緒,子類化qthread並且重寫它的
run()函式,例如:
class mythread :
public qthread
;執行緒同步
qmutex, qreadwritelock, qsemaphore, qwaitcondition 提供了執行緒同步的手段。使用執行緒的主要想法是希望它們可以盡可能併發執行,而一些關鍵點上線程之間需要停止或等待。例如,假如兩個執行緒試圖同時訪問同乙個全域性變數,結果可能不如所願。
qmutex 提供相互排斥的鎖,或互斥量。在乙個時刻至多乙個執行緒擁有mutex,假如乙個執行緒試圖訪問已經被鎖定的mutex,那麼它將休眠,直到擁有mutex的執行緒對此mutex解鎖。mutexes常用來保護共享資料訪問。
qreadwriterlock 與qmutex相似,除了它對 "read","write"訪問進行區別對待。它使得多個讀者可以共時訪問資料。使用qreadwritelock而不是qmutex,可以使得多執行緒程式更具有併發性。
qreadwritelock lock;
void readerthread::run()
void writerthread::run()
qsemaphore 是qmutex的一般化,它可以保護一定數量的相同資源,與此相對,乙個mutex只保護乙個資源。下面例子中,使用qsemaphore來控制對環狀緩衝的訪問,此緩衝區被生產者執行緒和消費者執行緒共享。生產者不斷向緩衝寫入資料直到緩衝末端,再從頭開始。消費者從緩衝不斷讀取資料。訊號量比互斥量有更好的併發性,假如我們用互斥量來控制對緩衝的訪問,那麼生產者,消費者不能同時訪問緩衝。然而,我們知道在同一時刻,不同執行緒訪問緩衝的不同部分並沒有什麼危害。
const int datasize = 100000;
const int buffersize = 8192;
char buffer[buffersize];
qsemaphore freebytes(buffersize);
qsemaphore usedbytes;
class producer : public qthread
;void producer::run()
}class consumer : public qthread
;void consumer::run()
fprintf(stderr, "/n");
}const int datasize = 100000;
const int buffersize = 8192;
char buffer[buffersize];
qwaitcondition buffernotempty;
qwaitcondition buffernotfull;
qmutex mutex;
int numusedbytes = 0;
class producer : public qthread
;void producer::run()
}class consumer : public qthread
;void consumer::run()
fprintf(stderr, "/n");
}來自:http://www.cppblog.com/yuanyajie/archive/2007/08/22/30599.html
QT中的多執行緒(一)
qt通過三種形式提供了對執行緒的支援。它們分別是,一 平台無關 的執行緒類,二 執行緒安全的事件投遞,三 跨執行緒的訊號 槽連線。這使得開發輕巧的多執行緒qt程式更為容易,並能充分利用多處理器機器的優勢。多執行緒程式設計也是乙個有用的模式,它用於解決執行較長時間的操作而不至於使用者介面失去響應。在q...
QT中的多執行緒(一)
qt中的多執行緒 一 華麗麗的分割線 十分感謝原文作者,幫我解決了近幾日的疑惑,對於qt的執行緒間的通訊有了進一步了解,在這裡向他致以我崇高的敬意。華麗麗的分割 線 qt通過三種形式提供了對執行緒的支援。它們分別是,一 平台無關 的執行緒類,二 執行緒安全的事件投遞,三 跨執行緒的訊號 槽連線。這使...
Qt中的多執行緒程式設計
qt中的多執行緒程式設計 qthread 類,該類提供了建立乙個新執行緒以及控制線程執行的各種方法。執行緒是通過 qthread run 過載函式開始執行的 在 qt 系統中,始終執行著乙個gui 主事件執行緒,這個主線程從視窗系統中獲取事件,並將它們分發到各個元件去處理。在 qthread 類中還...