继承
QThread
重写
void run() Q_DECL_OVERRIDE;
调用start()开启线程
使用
QMutex mutex;
QWaitCondition newdataAvailable;
将互斥量锁住
QMutexLocker locker(&mutex);
m_stop=true;
生产者唤醒所有线程表示创建了资源:
newdataAvailable.wakeAll();//唤醒所有线程,有新数据了
void QThreadProducer::run()
{m_stop=false;//启动线程时令m_stop=falseseq=0;qsrand(QTime::currentTime().msec());//随机数初始化,qsrand是线程安全的while(!m_stop)//循环主体{mutex.lock();diceValue=qrand(); //获取随机数diceValue=(diceValue % 6)+1;seq++;mutex.unlock();newdataAvailable.wakeAll();//唤醒所有线程,有新数据了msleep(500); //线程休眠100ms}
}
消费者解锁互斥量:
newdataAvailable.wait(&mutex);
void QThreadConsumer::run()
{m_stop=false;//启动线程时令m_stop=falsewhile(!m_stop)//循环主体{mutex.lock();newdataAvailable.wait(&mutex);//会先解锁mutex,使其他线程可以使用mutexemit newValue(seq,diceValue);mutex.unlock();
// msleep(100); //线程休眠100ms}}