天天看點

Qt中的多線程程式設計

Qt中的多線程程式設計

https://www.ibm.com/developerworks/cn/linux/l-qt-mthrd/

QThread 類,該類提供了建立一個新線程以及控制線程運作的各種方法。線程是通過 QThread::run() 重載函數開始執行的

在 Qt 系統中,始終運作着一個GUI 主事件線程,這個主線程從視窗系統中擷取事件,并将它們分發到各個元件去處理。在 QThread 類中還有一種從非主事件線程中将事件送出給一個對象的方法,也就是 QThread::postEvent()方法,該方法提供了 Qt 中的一種 Thread-safe 的事件送出過程。送出的事件被放進一個隊列中,然後 GUI 主事件線程被喚醒并将此事件發給相應的對象

Qt 還提供了 QMutex 類,一個線程在通路臨界資料時,需要加鎖,此時其他線程是無法對該臨界資料同時加鎖的,直到前一個線程釋放該臨界資料。通過這種方式才能實作對臨界資料的原子操作。

當發生特定事件時,QWaitCondition 将喚醒等待該事件的所有線程或者喚醒任意一個被選中的線程。

Qt 系統還提供了一個 QCustomEvent 類,用于使用者自定義事件,這些自定義事件可以利用 QThread::postEvent() 或者QApplication::postEvent() 被發給各種控件或其他 QObject 執行個體,而 QWidget 類的子類可以通過 QWidget::customEvent() 事件處理函數友善地接收到這些自定義的事件。

還可以使用系統中提供的定時器機制來實作類似的功能。定時器機制将并發的事件串行化,簡化了對并發事件的處理,進而避免了thread-safe方面問題的出現。

Qt 多線程學習(1)

http://www.diybl.com/course/3_program/c/c_js/20090303/157347.html

一、平台無關的線程類,

二、線程安全的事件投遞,

三、跨線程的信号-槽連接配接。

QThread 提供了開始一個新線程的方法

QThreadStorage 提供逐線程資料存儲

QMutex 提供互相排斥的鎖,或互斥量

QMutexLocker 是一個便利類,它可以自動對QMutex加鎖與解鎖

QReadWriterLock 提供了一個可以同時讀操作的鎖

QReadLocker與QWriteLocker 是便利類,它自動對QReadWriteLock加鎖與解鎖

QSemaphore 提供了一個整型信号量,是互斥量的泛化

QWaitCondition 提供了一種方法,使得線程可以在被另外線程喚醒之前一直休眠。

為建立一個線程,子類化QThread并且重寫它的run()函數

調用QThread::start()。

Qt多線程學習-用例子來了解多線程

http://www.diybl.com/course/3_program/c/c_js/20090303/157373.html

繼續閱讀