• Qt 条件等待


    项目场景:

            任务线程需要等待一定的条件再继续执行。


    条件等待是什么:

            Qt中的条件等待是通过QWaitCondition类实现的。作用就是任务线程等待某个条件并睡眠,等条件满足时,线程被唤醒并执行后续操作。Qt中,QWaitCondition通常和QMutex互斥锁配对使用,互斥锁用于保护共享资源的访问,条件等待用于等待某个条件的发生,从而实现线程之间的同步和通信。


    怎么使用:

    1. 创建QWaitCondition和QMutex对象
    2. 在需要等待某个条件的线程中,先获取QMutex来保护共享资源
    3. 判断条件是否满足,如果不满足则调用QWaitCondition的wait(),等待条件满足
    4. 满足条件的线程中,先获取QMutex来保护共享资源
    5. 修改条件,然后调用QWaitCondition的wakeOne()或者wakeAll(),唤醒等待的线程
    6. 被唤醒的线程再次获取QMutex,判断条件是否满足
    7. 如果条件满足则继续执行,否则继续等待

    示例:

           在这个示例中,Producer类模拟生产者线程,它会在2秒后将isReady标志设置为true,并发出信号唤醒等待的线程。Consumer类模拟消费者线程,它会在等待条件满足时被阻塞,直到收到信号后才会继续执行。在主函数中,创建了一个生产者和一个消费者对象,并启动它们的线程。然后使用wait()函数等待线程执行完毕。当生产者线程将isReady标志设置为true并发出信号后,消费者线程会被唤醒,并输出"消费者收到信号,开始消费"的信息。

    1. #include
    2. #include
    3. #include
    4. #include
    5. QWaitContion condition;
    6. QMutex mutex;
    7. bool isReady = false;
    8. class ProducerThread : public QThread
    9. {
    10. public:
    11. void run() override
    12. {
    13. qDebug("ProducerThread>>>>>>>");
    14. QThread::sleep(2);
    15. QMutexLocker locker(&mutex);
    16. isReady = true;
    17. condition.wakeOne();
    18. }
    19. };
    20. class ConsumerThread : public QThread
    21. {
    22. public:
    23. void run() override
    24. {
    25. qDebug(">>>>>>>ConsumerThread");
    26. QMutexLocker locker(&mutex);
    27. while(!isReady){
    28. condition.wait(&mutex);
    29. }
    30. qDebug() << "消费者收到信号,开始消费";
    31. }
    32. };
    33. int main(int argc, char *argv[])
    34. {
    35. QCoreApplication a(argc, argv);
    36. ProducerThread producerThread;
    37. ConsumerThread consumerThread;
    38. consumerThread.start();
    39. producerThread.start();
    40. consumerThread.wait();
    41. producerThread.wait();
    42. return a.exec();
    43. }

  • 相关阅读:
    11.ElasticSearch系列之搜索相关性算分机制
    Idea集成docker实现镜像打包
    python+pytest+selenium自动化测试图片搜索功能
    PR控制器
    正大国际期货:外盘恒指期货独特的行情特点有哪些?
    构建 Go 应用 docker 镜像的十八种姿势
    量化交易97个Python库、696个策略、55本书合集
    Mojo:新型AI语言中的7个令人惊叹的Python升级,用简单的英语解释人工智能
    openssl中SM2、SM3、SM4使用实例
    Lua学习笔记:探究package
  • 原文地址:https://blog.csdn.net/baidu_33879812/article/details/133942255