(Qt6 - Advanced) 3. QWaitCondition

Posted by : at

Category : Qt


Producer::Producer(QMutex *mutex, QWaitCondition *valueReady, int *value, QObject *parent)
{
    Q_UNUSED(parent);
    m_mutex = mutex;
    m_valueReady = valueReady;
    m_value = value;
}

void Producer::run()
{
    qInfo() << "Producer running";
    QThread::currentThread()->msleep(3000);

    m_mutex->lock();
    qInfo() << "Producer creating value";
    *m_value = QRandomGenerator::global()->bounded(1000);
    qInfo() << "Producer waking up consumer";
    m_mutex->unlock();

    // wait 중인 WaitCondition을 깨운다
    m_valueReady->wakeAll();

}
Consumer::Consumer(QMutex *mutex, QWaitCondition *valueReady, int *value, QObject *parent)
{
    Q_UNUSED(parent);
    m_mutex = mutex;
    m_valueReady = valueReady;
    m_value = value;
}

void Consumer::run()
{
    qInfo() << "Consumer running";
    m_mutex->lock();
    qInfo() << "Consumer locked the mutex";
    if(*m_value == 0)
    {
        qInfo() << "Consumer is waiting on a value";
        m_valueReady->wait(m_mutex);
    }

    qInfo() << "Consuming:" << *m_value;
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links