VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
再谈应用程序的实例问题

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

 

再谈应用程序的实例问题

广州智软公司
卢斌

---- 周长发先生的《Visual C++编程的若干技巧》提供了使应用程序只能运行一个实例的一种解决办法,本人经过实践后发现效果不错,但也发现如果在启动一个实例后,将应用程序执行文件的名称做一下修改,执行修改后的文件仍然可以启动多个实例。而UltraEdit,GetRight等软件则不存在这样的情况。

---- 查看代码和VC的帮助后,发现问题在于原文在创建信号量和设置寻找标记时使用的是CWinApp的成员变量 m_pszExeName。该成员变量其实是应用程序执行文件的名称去掉扩展名后的部分,而不是应用程序名。 真正的应用程序名应为成员变量m_pszAppName。于是将用到m_pszExeName的三处代码均改为m_pszAppName, 重新编译执行,情况消失。

---- 虽然一般情况下用户不会修改应用程序执行文件的名称,但作为开发人员,我们的责任是将程序 尽量完美,存在缺陷不是我们所愿,因此写此短文以作补充。

---- 最后再提供一个方法和一个信息:

---- 1.另一种使应用程序只能运行一个实例的方法,只需在InitInstance()的最开始添加下列语句即可:

	HANDLE m_hMutex = 
    CreateMutex(NULL,TRUE,m_pszAppName);
	if (GetLastError()==ERROR_ALREADY_EXISTS){
		return FALSE;
	}

---- 但这种方法的不足之处是不能将已经启动的实例激活。

---- 2.在stingray公司整理开发的MFC FAQ软件中也提供了一些方法。该软件实际是一个MFC使用技巧的大汇集, 对使用MFC极有帮助,各位朋友不妨去stingray公司的主页( http://www.stingray.comhttp://www.stingsoft.com)下载.

 


 




相关文章

相关软件