123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #ifndef __CRITSECTION_20160221__
- #define __CRITSECTION_20160221__
- // ÁÙ½çÖµ;
- class ThreadSection
- {
- public:
- ThreadSection(){
- HRESULT hr = Init();
- (hr);
- }
- ~ThreadSection(){
- DeleteCriticalSection(&_CriticalSection);
- }
- bool Lock()
- {
- bool result = false;
- __try
- {
- EnterCriticalSection(&_CriticalSection);
- result = true;
- }
- __except (STATUS_NO_MEMORY == GetExceptionCode())
- {
- }
- return result;
- }
- bool Unlock()
- {
- bool result = false;
- __try
- {
- LeaveCriticalSection(&_CriticalSection);
- result = true;
- }
- __except (STATUS_NO_MEMORY == GetExceptionCode())
- {
- }
- return result;
- }
- private:
- HRESULT Init() throw()
- {
- HRESULT hRes = E_FAIL;
- __try
- {
- InitializeCriticalSection(&_CriticalSection);
- hRes = S_OK;
- }
- __except (STATUS_NO_MEMORY == GetExceptionCode())
- {
- hRes = E_OUTOFMEMORY;
- }
- return hRes;
- }
- ThreadSection(const ThreadSection & tSection);
- ThreadSection &operator=(const ThreadSection & tSection);
- CRITICAL_SECTION _CriticalSection;
- };
- class AutoThreadSection
- {
- public:
- AutoThreadSection(IN ThreadSection* pSection){
- _pSection = pSection;
- _pSection->Lock();
- }
- ~AutoThreadSection(){
- _pSection->Unlock();
- }
- private:
- AutoThreadSection(const AutoThreadSection & tSection);
- AutoThreadSection &operator=(const AutoThreadSection & tSection);
- ThreadSection * _pSection;
- };
- #endif //__CRITSECTION_20160221__
|