您的位置:首页 > 其它

单例模板模式控制台管理机制

2015-10-13 21:40 429 查看
#pragma once

#ifndef __CONTROL__H
#define __CONTROL__H

#include<Windows.h>
template<typename T>
class CControl
{
protected:
CControl();
~CControl();
CControl(const CControl &control);
CControl & operator = (const CControl &control);
public :
static CControl *GetInstance();
static void DestoryInstance();

//封装控制台事件处理函数
static BOOL WINAPI HandlerRoutine(DWORD dwCtrltype);//SetConsoleCtrlHandler
//提供给main调用接口
BOOL OpenControl();
void CloseControl();
//提供派生类去实现资源初始化和资源销毁的方法
//因为不知道子类具体有什么
BOOL Init()
{
return TRUE;
}
void UnInit()
{
}
public :
//控制台事件通知主线程退出标记
static BOOL m_bQuit;
private:
static CControl *m_pSingleton;
};

////////////////////////////////////单例///////////////////////////////////////////
template<typename T>
CControl<T>* CControl<T>::m_pSingleton = NULL;
template<typename T>
CControl<T>::CControl()
{

}
template<typename T>
CControl<T>::~CControl()
{
}
template<typename T>
CControl<T>::CControl(const CControl<T> &control)
{
}
template<typename T>
CControl<T> & CControl<T>::operator = (const CControl<T> &control)
{
return *CControl<T>::m_pSingleton;
}
template<typename T>
CControl<T> *CControl<T>::GetInstance()
{
if(CControl<T>::m_pSingleton == NULL)
{
CControl<T>::m_pSingleton = new T;
}
return CControl<T>::m_pSingleton;
}

template<typename T>
void CControl<T>::DestoryInstance()
{
if(CControl<T>::m_pSingleton != NULL)
{
delete (T*)CControl<T>::m_pSingleton;//**********注意删除子类的对象**************
CControl<T>::m_pSingleton = NULL;
}
}
///////////////////////////////////////////////////////////////////////////
template<typename T>
BOOL CControl<T>::m_bQuit = FALSE;
//封装控制台事件处理函数
template<typename T>
BOOL WINAPI CControl<T>::HandlerRoutine(DWORD dwCtrltype)
{
switch(dwCtrltype)
{
case CTRL_CLOSE_EVENT:
case CTRL_LOGOFF_EVENT:
case CTRL_SHUTDOWN_EVENT:
{
CControl<T>::m_bQuit = TRUE;
while(1)
{
::Sleep(10);
}
}
break;
}
return TRUE;
}
//提供给main调用接口
template<typename T>
BOOL CControl<T>::OpenControl()
{
//设置控制台事件
::SetConsoleCtrlHandler(CControl<T>::HandlerRoutine,TRUE);
//初始化派生类
((T*)CControl<T>::m_pSingleton)->Init();
return TRUE;
}
template<typename T>
void CControl<T>::CloseControl()
{
//反初始化派生类
((T*)CControl<T>::m_pSingleton)->UnInit();
}
#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: