在启动新实例之前,如何在c++中检查应用程序是否已经运行
How to check in C++ if an application is already running before launching a new instance?
我找到了一些关于实现的参考资料,但只有一个清晰的c++描述(Joseph Newcomers文章http://www.flounder.com/nomultiples.htm#CreateMutex),但它是(C)1999年,所以我有点不愿意使用它,而不是首先检查今天是否有"更新/更好"的方法。
谢谢
任何命名的对象都可以,可以是文件、互斥锁、事件、邮件槽、TCP端口等。ERROR_ALREADY_EXISTS
告诉您实例是否已经存在。
对于Win32内核命名空间中的对象,自1999年以来有一个变化——由于终端服务,您现在可以使用Global
或Local
前缀来指定它是在整个计算机上的一个实例还是每个用户登录会话一个实例。
如果你想要更便携的东西,那么绑定一个TCP端口,或者创建一个文件并专门锁定它,往往在各种操作系统上都能很好地工作。
如果您在Windows上编程,那么标准的方法确实是在程序开始时创建一个互斥锁。互斥锁的有效期应该与程序的生命周期一样长,在此期间,尝试创建具有相同名称的互斥锁将失败。
从那以后没有任何显著的改善。在这个问题上,自从几年前我在Usenet上写了一篇文章以来,还没有任何显著的改进。
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 如何检查一个c++字符串中有多少相同的字符/数字
- 检查不带转换的扫描格式
- 如何检查线程是否锁定
- 清除前检查矢量
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- C++LDAP检查用户是否是特定组的成员
- 检查TCHAR数组输入是否为带符号整数C++
- 用概念检查属性的类型