/*! @class
********************************************************************************
<PRE>
类名称
: CSem
功能
:
封装信号量相关操作
异常类
: CSem::Exp
--------------------------------------------------------------------------------
备注
: -
典型用法
: -
--------------------------------------------------------------------------------
作者
:
白杨
</PRE>
*******************************************************************************/
class
CSem
{
public:
///////////////////////////////////////////////////////////////////////
类型定义
//!
异常类
struct
Exp
:
public
byExp
{
enum
{
ERR_CREATE
= 1,
ERR_OPEN
};
Exp(IN
UINT
nErr
= 0,
IN
const
stringEx&
stDescription
= "")
:
byExp(nErr,
stDescription)
{}
};
public:
/////////////////////////////////////////////////////////////
构造、析构、初始化
//!
构造函数
-
创建一个新的信号量
explicit
CSem(IN
long
nInitCount,
IN
long
nMaxCount
= 1,
IN
LPCTSTR
pstrName
=
NULL)
throw(Exp);
//!
构造函数
-
打开一个已创建的命名信号量
explicit
CSem(IN
LPCTSTR
pstrName
=
NULL)
throw(Exp);
~CSem();
public:
///////////////////////////////////////////////////////////////////////
公用方法
//!
申请资源
bool
P(IN
DWORD
nTimeOut
=
INFINITE);
//!
归还资源
bool
V(IN
long
nReleaseCount
= 1);
private:
///////////////////////////////////////////////////////////////////////////
属性
HANDLE
m_hSemaphore;
private:
/////////////////////////////////////////////////////////////////////
禁用的方法
CSem(IN
const
CSem&
rhs);
CSem&
operator=(IN
const
CSem&
rhs);
}; |