QT多线程学习
Posted 思而不学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT多线程学习相关的知识,希望对你有一定的参考价值。
一、想要使用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
创建的类中有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多线程学习的主要内容,如果未能解决你的问题,请参考以下文章