Posted on 2011-05-23 14:46
CyberC++ 阅读(108)
评论(0) 编辑 收藏 引用 所属分类:
C++ Language
HANDLE m_hMutex;

m_hMutex = CreateMutex(NULL, false, NULL );
if (!m_hMutex)

{
char cBuffer[1024];
sprintf_s(cBuffer, 1024, " Unable to create a mutex. Error: %d", GetLastError());
LOG(2, cBuffer);
}

if (m_hMutex)

{
CloseHandle(m_hMutex);
}

while ((r = WaitForSingleObject(m_hMutex, 5000)) != WAIT_OBJECT_0)

{
char cBuffer[1024];
switch (r)

{
case WAIT_TIMEOUT:
sprintf_s(cBuffer, 1024, " Backup system account lock failed (timeout). Locked by %s (%d), request from %s (%d)",
m_sLockFile.c_str(), m_unLockLine,
sFile.c_str(), unLine);
LOG(2, cBuffer);
break;
case WAIT_ABANDONED:
sprintf_s(cBuffer, 1024, " Backup system account lock failed (abandoned). Locked by %s (%d), request from %s (%d)",
m_sLockFile.c_str(), m_unLockLine,
sFile.c_str(), unLine);
LOG(2, cBuffer);
break;
case WAIT_FAILED:
sprintf_s(cBuffer, 1024, " Backup system account lock failed (failed: %d). Locked by %s (%d), request from %s (%d)",
GetLastError(),
m_sLockFile.c_str(), m_unLockLine,
sFile.c_str(), unLine);
LOG(2, cBuffer);
break;
default:
sprintf_s(cBuffer, 1024, " Backup system account lock failed (unknown). Locked by %s (%d), request from %s (%d)",
m_sLockFile.c_str(), m_unLockLine,
sFile.c_str(), unLine);
LOG(2, cBuffer);
break;
}
}


if (!ReleaseMutex(m_hMutex))

{
char cBuffer[1024];
sprintf_s(cBuffer, 1024, " Mutex release failed. Error: %d", GetLastError());
LOG(2, cBuffer);
}