WinCE下臨界區CriticalSection使用
臨界區(CriticalSection)主要用來(lái)線(xiàn)程的同步,使用臨界區相對比較簡(jiǎn)單;其使用的系統API如下:
一、InitializeCriticalSection
初始化
VOID InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection);
本函數初始化臨界區資源,在使用前必需調用函數
二、EnterCriticalSection
占用臨界區
VOID EnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection );
在你需要同步的代碼前調用本函數來(lái)占用臨界區
三、TryEnterCriticalSection
嘗試性占用臨界區
BOOL TryEnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection );
嘗試性地占用臨界區,如果此時(shí)臨界區沒(méi)被占用,則占用臨界區并返回非0值,否則反回0值
四、LeaveCriticalSection
釋放對臨界區的占用
VOID LeaveCriticalSection ( LPCRITICAL_SECTION lpCriticalSection );
在你占用臨界區并執行完同步代碼之后必需調用本函數來(lái)釋放對臨界區的占用
五、DeleteCriticalSection
釋放臨界區資源
VOID DeleteCriticalSection( LPCRITICAL_SECTION lpCriticalSection );
在你的程序退出時(shí)或在不再使用臨界區是調用本函數來(lái)釋放臨界區資源
使用例子如下:
1.初始化
//初始化
CRITICAL_SECTION tCri;
InitializeCriticalSection( &tCri );
2.占用與釋放占用
//占用與釋放占用
EnterCriticalSection( &tCri );
//此處為你需要同步的代碼
……..
LeaveCriticalSection( &tCri );
當然此段代碼也可以寫(xiě)成如下的樣子
if (TryEnterCriticalSection( &tCri )!=0)
{
//此處為你需要同步的代碼
……..
LeaveCriticalSection( &tCri );
}
當然我們知道TryEnterCriticalSection是不會(huì )阻塞你的程序的執行的
3.釋放臨界區資源
DeleteCriticalSection( &tCri );
轉自:http://www.a3gs.com/BookViews.asp?InfoID=2545&classID=800
聯(lián)系客服