c++程序只存在一个实例(exe)的方法

在我们编写程序的时候,经常会注意到的一个问题就是如何能够让程序只运行一个实例,确保不会让同一个程序多次运行,从而产生诸多相同进程,给我们的带来不便呢?

创建互斥体实现(强烈推荐新手用这个方法)

CreateMutex是一个计算机函数,作用是找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体。这个方法是最为简单的一个方法,语法逻辑比较容易接受,后面的进程,内存,原子等操作,需要有一定操作水平的程序员才能了解。

代码如下

QT平台基于共享内存QSharedMemory(标准C++请参考下面)

基于Qt的实现是利用了Qt中的共享内存(QSharedMemory),第一个运行的exe创建一个共享内存,后续的程序如果能访问到此内存,就认为已有exe存在了。代码如下:

C++共享全局变量实现方式

通过共享全局变量的方式实现进程单实例运行

基于windows C++寻找进程数量

每次运行一个exe实例就会产生一个进程,而只要找出进程的数量也就能锁定产生了几个exe实例,如果进程的数量大于1,我们就放弃实例化。

通过查找系统原子表的方法来判断

这个方法是网上所查找的,不建议用这个方法

通过FindWindow函数来判断

FindWindow这个函数检索处理顶级窗口的类名和窗口名称匹配指定的字符串。这个函数不搜索子窗口。这种方法有缺陷,窗口名字改变之后就再也找不到了,FindWindow()的参数ClassName和Caption比较难取得。当然不是所有的程序会有产生窗口,比如控制台程序或者服务程序,并不会创建窗口,所以这个只是作为一个参考。

文件记录猥琐方法

这个方法可能也适合一个新手,在exe运行的时候你可以记录到本地文件夹的一个文档里,每次运行exe就去读文档里面的配置,看是否已经有实例已经在运行。具体代码可能偏多,但是简单,这里就不贴出代码了。

属性设置或者注册表设置猥琐办法

通过SetProp()为程序主窗口设置一个特殊的Property,然后在启动时遍历所有的窗口,找出包含着个Property的窗口局柄。或者说你可以直接将这个属性写到注册表里,每次运行实例的时候去看注册表的值判断。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Depth君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值