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
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多线程学习的主要内容,如果未能解决你的问题,请参考以下文章

自己动手写QT多线程demo

Qt学习笔记8.Qt中的多线程

Qt 多线程和网络编程学习

QT多线程学习

Qt学习 之 多线程程序设计

QT 实用代码片段