打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
单实例运行的几种方法
 单实例运行的几种方法  
  

实现的方法有很多,但简单而常用的方法有下面几种:

方法1:

 HANDLE Handle = CreateMutex( NULL, FALSE , _T("ONLY_ONE_INSTANCE"));

 if(Handle == NULL)
 {
       // 创建 Mutex 出错,
 }else
 {
 if (ERROR_ALREADY_EXISTS == GetLastError())
 {
         //已有一个实例正在运行, 退出程序
 }

方法2:  

if(::GlobalFindAtom( "unique_instance" )==0 )

 /*
  * 没有找到 "unique_instance" 对应的 ATOM 值,
  * 所以可以认为先前没有实例运行
  */

 ::GlobalAddAtom( "unique_instance" );
 
 /*
  * 运行我们的实例
  */
}else
{
 AfxMessageBox( "已有实例运行!" );
 /*
  * 结束本程序的运行
  */
}

记住当前程序退出时要调用 GlobalDeleteAtom 删除代表本实例的 ATOM 。如果忘记删除,那以后该实例程序就不能再运行了。可见该 ATOM 值不是和特定应用程序相联系的,当应用程序在没有删除ATOM值就退出后,该值并没有被操作系统删除。

这样就会遇到下面情景:假设你的程序因为某种原因非正常退出(ATOM 值没有删除),那么用户想再次运行你的程序时就会失败。因为新运行的程序总能找到 ATOM。

这种方法不好,最好别使用。

方法3:
可以通过文件映射的方法来做
创建一个有名字的映射区域, 再此仅给出思路

方法4:
可以通过在文件中设置共享节来做,在共享节中设置变量,通过变量来判断是否已有实例运行。
共享节应该放在 DLL 中,当然变量也在里面。
DLL 被我们的程序加载,然后我们改变的他的值为一个特殊的值。
每次我们的实例程序运行时都预先判断这个变量是否是我们设置的特殊值.
如果是,那就说明已有程序在运行。不是的话就设置它为特殊值,我们的程序运行


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java static块和static 方法 的使用区别
查询当前数据库实例名
数控编程最高境界,教你用宏程序编程的方法,实例介绍简单详细!
java多线程并发访问解决方案
GoF设计模式之五 Singleton- -
【设计模式】5. 单例模式(以及多线程、无序写入、volatile对单例的影响)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服