自定义的互斥量类,可以用于线程或进程的同步

#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值