码迷,mamicode.com
首页 > 编程语言 > 详细

QT多线程学习

时间:2017-09-09 00:03:13      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:protected   替换   nbsp   space   err   adt   信号   实现   thread   

一、想要使用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多线程学习

标签:protected   替换   nbsp   space   err   adt   信号   实现   thread   

原文地址:http://www.cnblogs.com/ch122633/p/7496748.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!