15.4 使应用程序在同一时刻只能运行一个实例
在某些情况下,需要应用程序在同一时刻只能运行一个,例如杀毒软件等。可以在应用程序启动时创建一个有名字的互斥器(Mutexes,核心对象),如果系统中已经存在该程序的运行实例,则创建失败,程序退出;否则,程序正常启动,已创建的互斥器将阻止该程序被再次启动直到程序退出。在创建这个核心对象的程序示例(也是唯一存在的示例)退出时,核心对象被释放。
默认情况下,Visual C++(www.cppentry.com) 6.0向导为基于MFC的工程创建了一个派生自CWinApp的子类,结构如下(有删减):
class CXXApp : public CWinApp |
可以在CXXApp::InitInstance()中创建互斥器(CXXApp为向导生成的代表应用程序的类名,依据实际工程而定),在CXXApp::ExitInstance()中销毁核心对象。为了实现该功能,可以按照以下步骤编写代码。
(1)为CXXApp添加一个HANDLE类型的私有成员变量。
(2)重载类CWinApp的ExitInstance()成员函数。这时类CXXApp代码结构如下:
//XX.h //XX.cpp |
BOOL CXXApp::InitInstance() if (ERROR_ALREADY_EXISTS == GetLastError()) //相关代码,略 return TRUE; int CXXApp::ExitInstance() |
【责任编辑:夏书 TEL:(010)68476606】
| 回书目 上一节 下一节 |