⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 criticalsection.h

📁 这是本人在工作中积累的VC++类库
💻 H
字号:
/************************************************************************
模快名:		moxu 公共类库
功能:		对CRITICAL_SECTION的简单封装
完成日期:	2007-10-20
作者:		许 培 Xu Pei(Email/MSN: peimoxu@163.com)

本代码可以自由使用,但因使用本代码造成的后果,本人不承担任何责任
************************************************************************/

#pragma once

#include <Windows.h>
#include "Exception.h"


namespace moxu
{

	class CriticalSection
	{
	private:
		CRITICAL_SECTION m_cs;
		volatile bool m_state;

	public:
		CriticalSection(int spinCount = 0) : m_state(true)
		{
			if(!InitializeCriticalSectionAndSpinCount(&m_cs, spinCount))
				m_state = false;
		}

		~CriticalSection(void)
		{
			DeleteCriticalSection(&m_cs);
		}

		bool Lock()
		{
			if(!m_state) return false;
			EnterCriticalSection(&m_cs);
			return true;
		}

		bool UnLock()
		{
			if(!m_state) return false;
			LeaveCriticalSection(&m_cs);
			return true;
		}
	};

	//////////////////////////////////////////////////////////////////////////

	class ScopedLock
	{
	private:
		CriticalSection& m_rCs;

	public:
		ScopedLock(CriticalSection& cs) : m_rCs(cs){ m_rCs.Lock(); }
		~ScopedLock(){ m_rCs.UnLock(); }
	};

}//namespace moxu

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -