0

我有一个由 QTconcurrent 运行启动的功能。在这个函数中,我使用 QThread(获取由 QTConcurrent 运行创建的线程)静态方法将其休眠一段时间,但我不想再使用时间来激活它,我想使用 WaitCondition 来唤醒线程在执行的另一个点,但我搜索了很多,没有找到任何这样的案例。我只在 run() 方法中看到 WaitConditions。有没有办法在 QtConcurrent 启动的线程中使用 QWaitCondition?

4

1 回答 1

2

您还需要一个互斥锁:

void work(QMutex* mutex, QWaitCondtion* cond, volatile bool* wake){
    //do work
    {
        QMutexLocker locker(mutex);
        while(!*wake){
            cond->wait(mutex);
        }
    }
    //do more work
}

wake如果已经设置为 ,则该循环是避免虚假唤醒并让线程通过的必要条件true。需要锁定整个循环以避免各种竞争条件。

你唤醒线程:

{
    QMutexLocker locker(mutex);
    *wake = true;
    cond->wakeOne();
}
于 2014-12-11T15:23:58.953 回答