以控制台程度为例。
一般情况下在主程度所在的cpp文件的头部添加如下代码:
#pragma data_seg("Shared")
int volatile g_lAppInstance = 0;
#pragma data_seg()
#pragma comment(linker,"/section:Shared,RWS")
注意:若此cpp文件中,有#include "stdafx.h",应该在这条语句之后添加,不然会报找不到g_lAppInstance的错误。
然后在main函数的开头添加如下代码:
if ( ++g_lAppInstance > 1 )
{
MessageBox(NULL,(LPCSTR)"程序已经运行",(LPCSTR)"",MB_OK);
return -1;
}
下面为一个简单的实例,代码如下:
#pragma data_seg("Shared")
int volatile g_lAppInstance = 0;
#pragma data_seg()
#pragma comment(linker,"/section:Shared,RWS")
#include <iostream>
#include "windows.h"
using namespace std;
int main()
{
if ( ++g_lAppInstance > 1 )
{
MessageBox(NULL,"程序已经运行","",MB_OK);
return 0;
}
cout << "---------------hello world--------------" << endl;
while(1);
return 0;
}
编译生成.exe文件,运行一次此文件,第二次运行时会弹出“程序已经运行”的对话框。