• 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. }

  • 相关阅读:
    数据库导入数据集TPCH IMDB也可
    SQL基础知识笔记
    【机器学习】K-means聚类分析
    Elasticsearch head 连接 阿里云ES
    百万级别数据批量插入 MySQL,哪种方式最快?
    接口响应慢该如何排查
    【数据结构趣味多】顺序表基本操作实现(Java)
    局域网和广域网的区别
    李宏毅老师《机器学习》课程笔记-4.1 Self-attention
    控制器功能端口说明
  • 原文地址:https://blog.csdn.net/baidu_33879812/article/details/133942255