#include <windows.h>
/** 线程安全的计数器
\author FongLuo
\version 0.0.0.2
\date 29 April 2008 15:25:44
\note note
\par Change history:
Copyright © FongLuo 2008 - All Rights Reserved
*/
class CSafeCounter
{
public:
enum {DEFAULT_VALUE=0};
public:
CSafeCounter(LONG vl=DEFAULT_VALUE) : m_countValue(DEFAULT_VALUE) {::InterlockedExchange(&m_countValue, vl);}
~CSafeCounter() {}
public:
void clear(LONG vl=DEFAULT_VALUE) { ::InterlockedExchange(&m_countValue, vl);}
//! 加一
LONG inc() {return ::InterlockedIncrement(&m_countValue);}
//! 减一
LONG dec() {return ::InterlockedDecrement(&m_countValue);}
//! 取当前值
LONG getCurValue() {LONG curValue = inc()-1; dec(); return curValue;}
public:
void clear()
{
for(;0!=getCurValue();)
{
m_countValue = 0;
}
}
private:
LONG m_countValue;
};
2008年4月29日 17:33:51 修正了clear()中的错误。