燕子lovinglife 2015-10-29 07:08 采纳率: 0%
浏览 1577
已结题

程序时不时会出现一个错误

图片说明

vs2008写的程序,也用了QT做得界面,程序运行时有时候会出现这个错误,不是一直出现的,可能运行7/8次会有一次。有谁有经验大概是哪一方面的问题。
程序中使用 QVecto的地方
QVector m_vectorMsg;
void QThreadProc::PostMessage(uint uMsg)
{
m_mutex.lock();

if(m_vectorMsg.isEmpty())
{
    m_vectorMsg.append(uMsg);
    m_mutex.unlock();
    return;
}

uint uSize = m_vectorMsg.size();
for (uint i = 0; i < uSize; i++)
{
    if (m_vectorMsg.at(i) == uMsg)
    {
        m_vectorMsg.remove(i);
        break;
    }
}
m_vectorMsg.append(uMsg);

m_mutex.unlock();

}

bool QThreadProc::GetMessage(uint& uMsg)
{
m_mutex.lock();

if(m_vectorMsg.isEmpty())
{
    m_mutex.unlock();
    return false;
}

uMsg = m_vectorMsg.at(0);
m_vectorMsg.remove(0);
m_mutex.unlock();
return true;

}

else {
Q_ASSERT(rmutexes.isEmpty());
for (int i = 0; i < MAX_READERS; i++) {
Qt::HANDLE mutex = getMutexHandle(i, false);
if (mutex)
rmutexes.append(mutex);
}
if (rmutexes.size()) {
DWORD res = WaitForMultipleObjects(rmutexes.size(), rmutexes.constData(),
TRUE, block ? INFINITE : 0);
if (res != WAIT_OBJECT_0 && res != WAIT_ABANDONED) {
if (res != WAIT_TIMEOUT)
qErrnoWarning("QtLockedFile::lock(): WaitForMultipleObjects failed");
m_lock_mode = WriteLock; // trick unlock() to clean up - semiyucky
unlock();
return false;
}
}
}

m_lock_mode = mode;
return true;

}

  • 写回答

2条回答 默认 最新

  • 东风玖哥 2015-10-29 10:22
    关注

    别用VS2008编程,用点常见版本

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料