sh_lock.cpp

来自「rsa算法打的一个包」· C++ 代码 · 共 104 行

CPP
104
字号
// SH_Lock.cpp: implementation of the SH_Lock class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SH_Lock.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

SH_Lock::SH_Lock()
{
    m_strName = _T("");
    m_hMutex  = NULL;
}

SH_Lock::SH_Lock(LPCTSTR cszName)
{
    m_strName = cszName;
    m_hMutex  = NULL;
}

SH_Lock::~SH_Lock()
{
    Close();
}

VOID    SH_Lock::SetName(LPCTSTR cszName)
{
    m_strName = cszName;
}

LPCTSTR SH_Lock::GetName(VOID)
{
    return (LPCTSTR)m_strName;
}

BOOL    SH_Lock::Create()
{
    if(m_hMutex == NULL)
    {
        ASSERT(m_strName.GetLength() > 0);
        m_hMutex = ::CreateMutex(NULL,FALSE,(LPCTSTR)m_strName);
    }

    return (BOOL)((m_hMutex != NULL)?TRUE:FALSE);
}

BOOL    SH_Lock::Create(LPCTSTR cszName)
{
    SetName(cszName);

    return Create();
}

BOOL    SH_Lock::Lock(DWORD dwTimeout/*=INFINITE*/)
{
    if( m_hMutex == NULL)
    {
        if(!Create()) 
            return FALSE;
    }

	if (::WaitForSingleObject(m_hMutex, dwTimeout) == WAIT_OBJECT_0)
		return TRUE;
	else
		return FALSE;
}

BOOL    SH_Lock::UnLock()
{
    if(m_hMutex == NULL)
        return FALSE;

    return (BOOL)::ReleaseMutex(m_hMutex);

}

VOID    SH_Lock::Close()
{
    if(m_hMutex != NULL)
    {
        UnLock();
        CloseHandle(m_hMutex);
        m_hMutex = NULL;
    }
}

const CRITICAL_SECTION SH_Lock::Initialize()
{
    CRITICAL_SECTION cs;

    InitializeCriticalSection(&cs);

    return cs;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?