【问题标题】:Reusing QMutex and QWaitCondition重用 QMutex 和 QWaitCondition
【发布时间】:2011-03-07 10:06:03
【问题描述】:

QMutex+QWaitCondition 对象是否可重用? 我有一个方法可以等待一些线程完成。

void FinishWait()
{
    mutex.lock();
    waitCondition(&qMutex, ULONG_MAX);
}

waitCondition.wakeOne() 在不同的线程上调用。

第一次调用 FinishWait() 有效,但即使我指定了超时,第二次调用也不会返回。

【问题讨论】:

    标签: qt qt4 nokia carbide


    【解决方案1】:

    假设“mutex”和“qMutex”表示同一个变量(否则没有多大意义),则需要在wait()返回后解锁互斥锁。

    void FinishWait()
    {
        mutex.lock();
        waitCondition.wait(&mutex);
        mutex.unlock();
    }
    

    【讨论】:

    • 文档doc.qt.nokia.com/latest/qwaitcondition.html#wait 说:“互斥锁将被解锁,调用线程将阻塞,直到满足这些条件中的任何一个......”
    • 如果您进一步阅读,我很确定文档会说“如果 wait() 函数退出,互斥锁再次原子锁定”,因为这就是等待条件的语义。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多