InterlockedIncrement和InterlockedDecrement的妙用

view plain copy to clipboard print ?
  1. class A   
  2. {   
  3. protected:   
  4.     static long     m_nRef;   
  5. public:   
  6.     //类A的构造函数   
  7.     A()   
  8.     {   
  9.         if(1 == InterlockedIncrement(&m_nRef))   
  10.         {   
  11.             //以下代码只执行一次   
  12.             WSADATA wsaData;   
  13.             WSAStartup(MAKEWORD(2,2), &wsaData);   
  14.         }   
  15.     };   
  16.   
  17.     //类A的虚析构函数   
  18.     virtual ~A()   
  19.     {   
  20.         if(0 == InterlockedDecrement(&m_nRef))   
  21.         {   
  22.             //以下代码只执行一次   
  23.             WSACleanup();   
  24.         }   
  25.     }   
  26. };   
  27. long A::m_nRef = 0;  

你可能感兴趣的:(InterlockedIncrement和InterlockedDecrement的妙用)