Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/******************************************************************************
* * Copyright (c) 2000 Microsoft Corporation * * Module Name: * counter.h * * Abstract: * simple counter class - up/down counter, wait till zero * * Revision History: * Brijesh Krishnaswami (brijeshk) 05/02/2000 * created * *****************************************************************************/
#ifndef _COUNTER_H_
#define _COUNTER_H_
#include <windows.h>
#define INLINE_EXPORT_SPEC __declspec( dllexport)
class INLINE_EXPORT_SPEC CCounter { private: HANDLE _hEvent; LONG _lCount;
public: CCounter( ) { _lCount = 0; _hEvent = NULL; }
DWORD Init () { _hEvent = CreateEvent ( NULL, TRUE, TRUE, L"SRCounter" ); return _hEvent == NULL ? GetLastError() : ERROR_SUCCESS; }
~CCounter( ) { if ( _hEvent != NULL ) CloseHandle( _hEvent ); }
void Up( ) { if (InterlockedIncrement (&_lCount) == 1) { if (_hEvent != NULL) ResetEvent ( _hEvent ); } }
DWORD Down( ) { if ( InterlockedDecrement(&_lCount) == 0 ) { if (_hEvent != NULL && FALSE == SetEvent ( _hEvent )) { return GetLastError(); } } return ERROR_SUCCESS; }
DWORD WaitForZero( ) { if (_hEvent != NULL) { return WaitForSingleObject( _hEvent, 10 * 60000 ); /* 10 minutes */ } else return ERROR_INTERNAL_ERROR; }
LONG GetCount( ) { return _lCount; }
};
#endif
|