QWaitCondition使用小结

本文探讨了C++中的QMutex和QWaitCondition在实现并发控制中的应用,通过sendData和recvData两个线程的交互,展示了如何使用它们来同步和唤醒等待线程。重点在于理解信号槽机制和条件变量的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <QCoreApplication>
#include <thread>
#include <QWaitCondition>
#include <iostream>
#include <QThread>
#include <QMutex>
#include <queue>
using namespace std;

QMutex mutex1;
QWaitCondition condition;
int test = 0;

void sendData()
{
    while(1)
    {
        mutex1.lock();
        /*
         * 执行到此处 线程等待并 将mutex1暂时解锁
         * recvData执行wakeAll之后应该立即加锁返回向下执行但是 此时的锁 在recvData线程中并未被释放,,所以
         * 需要等到recvData释放锁之后,wait才能拿到锁 继续向下执行
         */
        condition.wait(&mutex1);//注意必须传入一个拿到锁的 QMutex对象
        cout <<  "sendData " << test++ << endl;
        mutex1.unlock();
    }
}

void recvData()
{
    while(1)
    {

        mutex1.lock();
        condition.wakeAll();
        QThread::msleep(2000);
        mutex1.unlock();
        cout <<"recvData " << test++ << endl;

    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    thread t1(sendData);
    t1.detach();
    thread t2(recvData);
    t2.detach();


    return a.exec();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值