#ifndef __MUTEX_H
#define __MUTEX_H
#include
class CMutex
{
public:
CMutex(LPCTSTR pszMutex)
{
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
m_hMutex = NULL;
m_hMutex = ::OpenMutex(MUTEX_ALL_ACCESS, FALSE, pszMutex);
if (NULL == m_hMutex)
{
m_hMutex = ::CreateMutex(NULL, FALSE, pszMutex);
}
}
~CMutex()
{
Unlock();
::CloseHandle(m_hMutex);
m_hMutex = NULL;
}
public:
VOID Lock()
{
DWORD dwResult;
do
{
dwResult = ::WaitForSingleObject(m_hMutex, INFINITE);
} while(dwResult != WAIT_OBJECT_0);
}
VOID Unlock()
{
if (NULL != m_hMutex)
{
DEBUG_MSG(TEXT( "FreeMutex ..."));
::ReleaseMutex(m_hMutex);
}
}
private:
static void DEBUG_MSG(LPCTSTR szFormat, ... )
{
#ifdef _DEBUG
SYSTEMTIME stST;
::GetLocalTime(&stST);
FILE *fFile = NULL;
TCHAR szTmp[1024] = {0};
char szMsg[1024] = {0}, szTemp[1024] = {0};
va_list valueList;
va_start(valueList, szFormat);
int nWrite = _vsntprintf((LPTSTR)szTmp, BUFSIZ, szFormat, valueList);
va_end( valueList );
if( (fFile = fopen( "c://DebugInfo.log", "a+" )) == NULL )
return;
::WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)szTmp, -1, szMsg, 1024, NULL, NULL );
fseek(fFile,0,SEEK_END);
//fwrite(szMsg,strlen(szMsg),1,fFile);
sprintf(szTemp, "%-80s%02d:%02d:%02d.%03d", szMsg,
stST.wHour,
stST.wMinute,
stST.wSecond,
stST.wMilliseconds);
fwrite(szTemp,strlen(szTemp), 1, fFile);
fwrite( "/n",1,1,fFile);
fclose(fFile);
#endif
}
private:
static HANDLE m_hMutex;
};
HANDLE CMutex::m_hMutex = NULL;
#endif
#define __MUTEX_H
#include
class CMutex
{
public:
CMutex(LPCTSTR pszMutex)
{
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
m_hMutex = NULL;
m_hMutex = ::OpenMutex(MUTEX_ALL_ACCESS, FALSE, pszMutex);
if (NULL == m_hMutex)
{
m_hMutex = ::CreateMutex(NULL, FALSE, pszMutex);
}
}
~CMutex()
{
Unlock();
::CloseHandle(m_hMutex);
m_hMutex = NULL;
}
public:
VOID Lock()
{
DWORD dwResult;
do
{
dwResult = ::WaitForSingleObject(m_hMutex, INFINITE);
} while(dwResult != WAIT_OBJECT_0);
}
VOID Unlock()
{
if (NULL != m_hMutex)
{
DEBUG_MSG(TEXT( "FreeMutex ..."));
::ReleaseMutex(m_hMutex);
}
}
private:
static void DEBUG_MSG(LPCTSTR szFormat, ... )
{
#ifdef _DEBUG
SYSTEMTIME stST;
::GetLocalTime(&stST);
FILE *fFile = NULL;
TCHAR szTmp[1024] = {0};
char szMsg[1024] = {0}, szTemp[1024] = {0};
va_list valueList;
va_start(valueList, szFormat);
int nWrite = _vsntprintf((LPTSTR)szTmp, BUFSIZ, szFormat, valueList);
va_end( valueList );
if( (fFile = fopen( "c://DebugInfo.log", "a+" )) == NULL )
return;
::WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)szTmp, -1, szMsg, 1024, NULL, NULL );
fseek(fFile,0,SEEK_END);
//fwrite(szMsg,strlen(szMsg),1,fFile);
sprintf(szTemp, "%-80s%02d:%02d:%02d.%03d", szMsg,
stST.wHour,
stST.wMinute,
stST.wSecond,
stST.wMilliseconds);
fwrite(szTemp,strlen(szTemp), 1, fFile);
fwrite( "/n",1,1,fFile);
fclose(fFile);
#endif
}
private:
static HANDLE m_hMutex;
};
HANDLE CMutex::m_hMutex = NULL;
#endif