这个值以秒为单位,他的默认值为2592000秒,大约30天.
8、同一个线程可以随便进入用一个关键段N次,也就是说同一个线程调用EnterCriticalSection无论几次都会返回.不同线程是否能够进入关键段,要看EnterCriticalSection的参数(CRITICAL_SECTION结构的地址)之前是否有线程进入过.要记住:飞机上的卫生间有多个,你可以随便进入无人的卫生间,不能进入有人的卫生间.
弄明白了CRITICAL_SECTION之后,使用CCriticalSection非常方便,如虎添翼.看代码:
//头文件
[cpp]
class CCriticalSection : public CSyncObjet
{...
public:
CRITICAL_SECTION m_sect;
public:
BOOL Unlock();
BOOL Lock();
BOOL Lock(DWORD dwTimeout);
...
}
[cpp]
<p>//构造函数</p><p></p>CCriticalSection::CCriticalSection() : CSyncObject(NULL)
{
HRESULT hr = S_OK;
if (!InitializeCriticalSectionAndSpinCount(&m_sect, 0))//可以理解为InitializeCriticalSection,为了效率,加了一个旋转锁.
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
if (FAILED(hr))
{
AtlThrow(hr);
}
}
//进入关键段
[cpp]
BOOL CCriticalSection::Lock()
{
::EnterCriticalSection(&m_sect);
return TRUE;
}
// 离开关键段
[cpp]
BOOL CCriticalSection::Unlock()
{
::LeaveCriticalSection(&m_sect);
return TRUE;
}
// 析构
[cpp]
CCriticalSection::~CCriticalSection()
{
::DeleteCriticalSection(&m_sect);
}