单例模板模式控制台管理机制
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
相关文章推荐
- 小团队Git实践
- map容器(4种元素添加方法的异同)
- 优化Web网站性能
- Recurrent Convolutional Neural Networks for Text Classification阅读笔记
- 安卓自定义属性里的format讲解
- ggplot2画图工作中的代码总结
- 汉诺塔系列
- 关于gdb和shp的FID问题
- [sicily]1194. Message Flood
- 第116讲:Hadoop集群之安装Java、创建Hadoop用户、配置SSH等实战学习笔记
- Python装饰器
- iOS:quartz2D绘图小项目(涂鸦画板)
- 生命的爱
- [大话设计模式]设计模式----单例设计模式
- 数据结构第二次上机实验【链表实现多项式的加法和乘法】
- 《需求工程——软件建模与分析》阅读笔记一
- MySQL学习历程(六):各种查询
- (转)协方差与协方差矩阵
- mac 下sed命令的-i参数
- leetcode Validate Binary Search Tree