#pragma once
/*******************************************************************************
* name : 信号量封装类
* description:
* input :
* output :
* return : void
* remark : Created by PanJing 2011-12-12 17:11:04 for #
*******************************************************************************/
#ifdef _WIN32
#include <Windows.h>
#include <winbase.h>
typedef DWORD TSemWaitTimeout;
class TSemaphore
{
private:
HANDLE m_sem;
public:
TSemaphore()
{
m_sem = NULL;
};
~TSemaphore()
{
if(NULL != m_sem)
{
CloseHandle(m_sem);
}
};
//创建信号量
bool Create(long lInitialCount, long lMaximumCount,const char* pName = NULL)
{
if (NULL != m_sem)
{
return false;
}
m_sem = CreateSemaphoreA(NULL, lInitialCount, lMaximumCount, pName);
return NULL != m_sem;
};
//等待信号量
bool Wait(TSemWaitTimeout dwMilliseconds=INFINITE )
{
if (NULL == m_sem)
{
return false;
}
if(WAIT_OBJECT_0 == WaitForSingleObject(m_sem, dwMilliseconds))
{
return true;
}
return false;
};
//释放信号量
bool Release()
{
return ReleaseSemaphore(m_sem, 1, NULL);
}
};