首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待QMutex断言

等待QMutex断言
EN

Stack Overflow用户
提问于 2015-06-22 17:58:28
回答 1查看 2.1K关注 0票数 6

我发现,即使是对QMutex的简单等待也会导致断言。我到底做错什么了?

代码语言:javascript
复制
QMutex mutex;

SyncMgr::SyncMgr(QObject *parent) : QObject(parent)
{
    moveToThread( &thread  );

    thread.start();

    process = new QProcess( this);

    connect( process, SIGNAL(readyReadStandardOutput()), this, SLOT(onReadyReadStandardOutput() ) );
    connect( process, SIGNAL(readyReadStandardError()), this, SLOT(onReadyReadStandardError() ) );
}

SyncMgr::~SyncMgr()
{
    delete process;
}

void SyncMgr::onConnected()
{
    cmdDispatcher.sendGetSerialNo();

    // this asserts
    waitForResponse.wait( &mutex ); // waitForResponse is CWaitCondition object

    // ...
}

我得到断言,错误消息是:

断言: thread\qmutex.cpp中的“复制”,第525行

EN

回答 1

Stack Overflow用户

发布于 2016-12-26 14:16:42

在调用waitForResponse.wait()之前,您需要锁定互斥锁。SyncMgr::onConnected()方法应该如下所示:

代码语言:javascript
复制
void SyncMgr::onConnected()
{
    cmdDispatcher.sendGetSerialNo();

    mutex.lock();
    waitForResponse.wait( &mutex );
    // do something
    mutex.unlock();

    ...
}

您可以在这里找到更多信息:http://doc.qt.io/qt-5/qwaitcondition.html#wait

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30986719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档