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