[Qt][Qt 多线程][下]详细讲解

时间:2025-02-22 08:16:51
  • 在多线程编程中,假设除了等待OS正在执⾏的线程之外,某个线程还必须等待某些条件满⾜才能执⾏,这时就会出现问题
    • 这种情况下,线程会很⾃然地使⽤锁的机制来阻塞其他线程
    • 因为这只是线程的轮流使⽤,并且该线程等待某些特定条件
      • ⼈们会认为需要等待条件的线程,在释放互斥锁或读写锁之后进⼊了睡眠状态
      • 这样其他线程就可以继续运⾏,当条件满⾜时,等待条件的线程将被另⼀个线程唤醒
  • 在Qt中,专⻔提供了QWaitCondition类来解决上述这样的问题
    • 多个线程之间的调度是无序的,为了一定程度的干预线程之间的执行顺序,引入条件变量
  • 特点QWaitCondition是Qt框架提供的条件变量类,⽤于线程之间的消息通信和同步
  • ⽤途:在某个条件满⾜时等待或唤醒线程,⽤于线程的同步和协调
  • 示例
    QMutex mutex;
    QWaitCondition condition;
    ---------------------------------------------------------------
    // 在等待线程中
    mutex.lock();
    
    // 检查条件是否满⾜,若不满⾜则等待
    while (!conditionFullfilled())
    {
    	condition.wait(&mutex); // 等待条件满⾜并释放锁
    }
    
    // 条件满⾜后继续执⾏
    
    mutex.unlock();
    ---------------------------------------------------------------
    // 在改变条件的线程中
    mutex.lock();
    
    // 改变条件
    changeCondition();
    condition.wakeAll(); // 唤醒等待的线程
    
    mutex.unlock();