要实现VC++或者MFC只运行一个程序实例,一般采用互斥量来实现,即首先用互斥量封装一个只运行一个程序实例的函数接口:
HANDLE hMutex = NULL; void MainDlg::RunSingleInstance()
{
hMutex = CreateMutex(NULL,FALSE,TEXT("Single Instance Demo"));
if (hMutex)
{
if(ERROR_ALREADY_EXISTS == GetLastError())
{
// 已经有实例在运行了,发送错误报警
::MessageBox(NULL,L"已经有实例在运行了",L"已经有实例在运行了",MB_OK);
exit(1);
}
}
}
接着就可以通过调用上面封装的接口函数来实现程序的单例运行模式,比如在Main.cpp里面 实现:
MainDlg mainDlg;
mainDlg.RunSingleInstance();
这样就实现了程序的单例模式,即只允许运行一个程序实例。