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;
}