WinCE下临界区CriticalSection使用
临界区(CriticalSection)主要用来线程的同步,使用临界区相对比较简单;其使用的系统API如下:
一、InitializeCriticalSection
初始化
VOID InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection);
本函数初始化临界区资源,在使用前必需调用函数
二、EnterCriticalSection
占用临界区
VOID EnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection );
在你需要同步的代码前调用本函数来占用临界区
三、TryEnterCriticalSection
尝试性占用临界区
BOOL TryEnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection );
尝试性地占用临界区,如果此时临界区没被占用,则占用临界区并返回非0值,否则反回0值
四、LeaveCriticalSection
释放对临界区的占用
VOID LeaveCriticalSection ( LPCRITICAL_SECTION lpCriticalSection );
在你占用临界区并执行完同步代码之后必需调用本函数来释放对临界区的占用
五、DeleteCriticalSection
释放临界区资源
VOID DeleteCriticalSection( LPCRITICAL_SECTION lpCriticalSection );
在你的程序退出时或在不再使用临界区是调用本函数来释放临界区资源
使用例子如下:
1.初始化
//初始化
CRITICAL_SECTION tCri;
InitializeCriticalSection( &tCri );
2.占用与释放占用
//占用与释放占用
EnterCriticalSection( &tCri );
//此处为你需要同步的代码
……..
LeaveCriticalSection( &tCri );
当然此段代码也可以写成如下的样子
if (TryEnterCriticalSection( &tCri )!=0)
{
//此处为你需要同步的代码
……..
LeaveCriticalSection( &tCri );
}
当然我们知道TryEnterCriticalSection是不会阻塞你的程序的执行的
3.释放临界区资源
DeleteCriticalSection( &tCri );
转自:http://www.a3gs.com/BookViews.asp?InfoID=2545&classID=800