在QtConcurrent启动的线程中使用QWaitCondition

时间:2014-12-11 15:12:17

标签: qt qthread qtconcurrent

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

1 个答案:

答案 0 :(得分: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();
}