目前听说有两种方法:
1、程序运行时创建一个信号量,判断信号量是否已创建
2、通过 WinMain函数的 hPrevInstance参数 判断
问题:
1、如果采用方法2,在MFC中有什么方法可以读取到WinMain的hPrevInstance参数的值?
2、还有没有更好更简便的方法?
1、程序运行时创建一个信号量,判断信号量是否已创建
2、通过 WinMain函数的 hPrevInstance参数 判断
问题:
1、如果采用方法2,在MFC中有什么方法可以读取到WinMain的hPrevInstance参数的值?
2、还有没有更好更简便的方法?
解决方案 »
- 纠结!各位有啥意见?
- 请问如何将列表控件的文本背景设为透明???
- CFileDialog--Debug Assertion Failed!
- 请教SDK编程(非MFC),滚动条显示和刷新的问题?谢谢
- 基于对话框的程序的奇怪问题。
- 快要急疯了,各位大侠快来帮帮忙,大放分!
- WINAPI为MFC保驾护航
- 版主,请将这个问题制顶!----请大家踊跃来探讨这个与我们c程序员的利益密切相关的问题(.net库怎么在6.0里面用)
- 谁来给介绍一下SubclassDlgItem和HookWindow()?
- opengl绘图后看不见模型
- vc断点调试时如何切换线程和查看每个线程执行到的位置?
- 有用visual studio做过安装包的帮忙看一下,谢谢
2. 用Mutex
if(Handle == NULL)
{
// 创建 Mutex 出错,
}else
{
if (ERROR_ALREADY_EXISTS == GetLastError())
{
AfxMessageBox("已有一个实例在运行,不允许同时打开多个!");
return FALSE;
}
}
hPrevInstance这个参数没用。
方法二:利用事件对象实现线程同步(CreateEvent函数).
这两种方法都能实现只有一个实例运行,创建一个非匿名对象,然后判断GetLastError()返回值就可以知道这个对象是以前有的,还是新创建的。
上百度查查相关函数,就能找到用法了。
#pragma data_seg("Shared")
int volatile g_lAppInstance =0;
#pragma data_seg()#pragma comment(linker,"/section:Shared,RWS")
创建一个有名字的全局内核对象
如MFC里的CMutex,就最快