1. 程式人生 > >QT多線程學習

QT多線程學習

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     void
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
Qthread繼承

創建的類中有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多線程學習