您的位置:首页 > 其它

Windows API一日一练(46)EnterCriticalSection和LeaveCriticalSection函数

2008-04-02 11:12 375 查看
多个线程操作相同的数据时,一般是需要按顺序访问的,否则会引导数据错乱,无法控制数据,变成随机变量。为解决这个问题,就需要引入互斥变量,让每个线程都按顺序地访问变量。这样就需要使用EnterCriticalSection和LeaveCriticalSection函数。 函数EnterCriticalSection和LeaveCriticalSection声明如下: WINBASEAPIVOIDWINAPIEnterCriticalSection(    __inout LPCRITICAL_SECTION lpCriticalSection    );    WINBASEAPIVOIDWINAPILeaveCriticalSection(    __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和LeaveCriticalSection来互斥访问变量m_nCount。通过上面这种方法,就可以实现多线程按顺序地访问相同的变量。  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐