为了阻止一个程序的多个实例同时运行,除了用CreateMutex的方法外还可以用
共享数据段的方法。
#pragma data_seg("SINGLEINSTANCE") //预处理指令用于设置共享数据段,名称为SINGLEINSTANCE
BOOL exist = FALSE; //对变量进行定义,并初始化,否则微软编译器会把没有初始化的数据放到.BSS段中,
//导致多个进程无法共享
#pragma data_seg() //表示段的结束
#pragma comment(linker,"/SECTION:SINGLEINSTANCE,RWS") //连结器必须知道有一个SINGLEINSTANCE
//共享数据段,字母RWS表示段具有读、写和共享属性
在程序的InitInstance()函数中增加判断
if( TRUE == exist )
{
AfxMessageBox("程序正在运行");
return FALSE;
}
//而后在你的程序后,将exist 设为真
CRelayServerDlg dlg;
m_pMainWnd = &dlg;
exist = TRUE;