Qt生产者消费者使用QWaitCondition

继承

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=false
    seq=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=false
    while(!m_stop)//循环主体
    {
        mutex.lock();
        newdataAvailable.wait(&mutex);//会先解锁mutex,使其他线程可以使用mutex
        emit    newValue(seq,diceValue);
        mutex.unlock();
//        msleep(100); //线程休眠100ms
    }

}

你可能感兴趣的:(qt,java,开发语言)