QT多線程學習
阿新 • • 發佈:2017-09-09
wait clas 學習 end 一起 cond 多線程 其他 dspc
一、想要使用Qthread必須先創建,繼承Qthread的類。
1 #ifndef THREADTEST_H 2 #define THREADTEST_H 3 4 #include <QThread> 5 #include <QMutex> 6 7 class ThreadTest : public QThread 8 { 9 public: 10 ThreadTest(); 11 ~ThreadTest(); 12 13 void setMessage(const QString &message); 14 voidQthread繼承stop(); 15 16 protected: 17 void run() Q_DECL_OVERRIDE; 18 19 20 private: 21 QString messageStr; 22 volatile bool stopped; 23 QMutex mutex; 24 bool quit; 25 26 }; 27 28 #endif // THREADTEST_H
創建的類中有void run()函數和void stop()。
當調用start()函數時,會接著調用run函數。
二、Mutex互斥鎖
可以用mutex.lock()上鎖,mutex.unlock()解鎖。用以保護資源。
然後可以用簡化的方式使用QmutexLocker lock(&mutex),函數中部分結束後自動釋放。
還有QReadWriteLock來替換mutex。lock.lockForRead(),lock.lockForWrite()
三、信號量
QSemaphore semaphore(1);
semaphore.acquire();
semaphore.release();
信號量和互斥量的區別在於信號量可以設置初值。
四、再生產和消費中的應用。
freeSpace.acquire();
寫
freeSpace.realease();
usedSpace.acquire();
讀
usedSpcae.release();
五、QWaitCondition
QWaitCondition允許一個線程在滿足一定的條件下觸發其他多個線程。可以和QMutex一起使用達到精確控制。
六、而Main和次線程通信
要是實現這個功能可以用信號和槽機制
QT多線程學習