标签: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
创建的类中有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和次线程通信
要是实现这个功能可以用信号和槽机制
标签:protected 替换 nbsp space err adt 信号 实现 thread
原文地址:http://www.cnblogs.com/ch122633/p/7496748.html