您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页QT QWaitCondition

QT QWaitCondition

来源:华拓科技网

QWaitCondition是Qt中的一个同步对象,主要用于在多线程环境中实现线程之间的通信和同步。

QWaitCondition的主要方法有wait()wakeOne()wakeAll()等。

wait()方法会让当前线程进入等待状态,直到其他线程调用wakeOne()或wakeAll()方法唤醒它。

wakeOne()方法会唤醒一个正在等待的线程。 wakeAll()方法会唤醒所有正在等待的线程。

QWaitCondition示例代码如下:

#include <QCoreApplication>

#include <QWaitCondition>

#include <QMutex>

class Thread : public QThread

{

public:

    Thread(QWaitCondition &condition, QMutex &mutex)

        : m_condition(condition), m_mutex(mutex) {}

protected:

    void run()

    {

        m_mutex.lock();

        qDebug() << "thread started";

        m_condition.wait(&m_mutex);

        qDebug() << "thread finished";

        m_mutex.unlock();

    }

private:

    QWaitCondition &m_condition;

    QMutex &m_mutex;

};

int main(int argc, char *argv[])

{

    QCoreApplication a(argc, argv);

    QWaitCondition condition;

    QMutex mutex;

    Thread thread(condition, mutex);

    thread.start();

    qDebug() << "main thread waiting";

    QThread::sleep(2);

    qDebug() << "main thread waking up thread";

    condition.wakeOne();

    thread.wait();

    return a.exec();

}

Thread类继承自QThread,并在构造函数中接收一个QWaitCondition引用和一个QMutex引用。这些将在主线程中定义并传入到Thread实例中。

在run()函数中,首先锁定互斥锁以防止其他线程访问共享资源。然后输出一条消息表示线程已经开始运行,并调用wait()函数等待条件变量变为真。当条件满足时,线程会自动从wait()函数返回并继续执行后面的代码。

在主线程中,先定义了一个QWaitCondition实例和一个QMutex实例,然后创建了一个Thread实例并将这两个对象传递给它。接下来启动子线程并让它运行起来。

在主线程中,先输出一条消息表示主线程正在等待子线程完成任务,然后让主线程休眠一段时间,再输出一条消息表示主线程已经醒来并准备唤醒子线程。

调用wakeOne()函数来改变条件变量的状态,使得等待中的子线程能够继续运行。最后,调用wait()函数来等待子线程完成任务并退出。

注意:wait()方法需要传入一个指向互斥锁的指针,这是因为线程在等待期间必须保持对互斥锁的所有权,以防止其他线程在同一时间修改共享数据。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务