词条 | EnterCriticalSection |
释义 | 多个线程操作相同的数据时,一般是需要按顺序访问的,否则会引导数据错乱,无法控制数据,变成随机变量。为解决这个问题,就需要引入互斥变量,让每个线程都按顺序地访问变量。这样就需要使用EnterCriticalSection和LeaveCriticalSection函数。 函数EnterCriticalSection和LeaveCriticalSection声明如下: WINBASEAPI VOID WINAPI EnterCriticalSection( __inout LPCRITICAL_SECTION lpCriticalSection ); WINBASEAPI VOID WINAPI LeaveCriticalSection( __inout LPCRITICAL_SECTION lpCriticalSection ); lpCriticalSection是创建临界区对象。 调用函数的例子如下: #001 CCaiWinMsg::CCaiWinMsg(void) #002 { #003 m_hBtn = NULL; #004 m_nCount = 0; #005 #006 m_pThreadA = NULL; #007 m_pThreadB = NULL; #008 #009 // #010 InitializeCriticalSection(&m_csCount); #011 #012 } #013 #014 CCaiWinMsg::~CCaiWinMsg(void) #015 { #016 DeleteCriticalSection(&m_csCount); #017 } #018 第10行是创建临界区对象。 第16行是删除临界区对象。 #001 // #002 //窗口的消息处理类。 #003 //蔡军生 2007/08/13 #004 // #005 class CCaiWinMsg : #006 public CCaiWin #007 { #008 public: #009 CCaiWinMsg(void); #010 virtual ~CCaiWinMsg(void); #011 #012 //线程操作函数。 #013 int AddCount(void) #014 { #015 // #016 EnterCriticalSection(&m_csCount); #017 int nRet = m_nCount++; #018 LeaveCriticalSection(&m_csCount); #019 #020 return nRet; #021 } 在函数AddCount里调用EnterCriticalSection |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。