C/C++中 如何只允许运行一个程序实例?多列一些方法。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++中 如何只允许运行一个程序实例?多列一些方法。相关的知识,希望对你有一定的参考价值。

还有 C/C++ 有提供什么相关的函数吗?

一般来说的办法就是怎么想让第二次运行知道已经有程序在运行了,或者说怎么能通知第二个程序已经有文件在运行了

例如程序运行后如果程序运行目录没有文件a.txt,就在程序运行目录新建一个文件a.txt,关闭的时候删除,这样第二次运行发现已存在了这个文件,说明程序已经在运行,故第二次运行直接退出

例如第一个运行程序用系统函数在本地监听一个socket端口,第二次运行程序发现这个端口已经被占用或者能连接,就知道已经有程序在运行了(例如smplayer就这样搞的)

例如第一个运行的程序在注册表某个地方写入一个1,退出时写入0,第二次运行的程序发现注册表这个地方是1就退出,如果是0就可以继续运行了,也就是其实是第一次运行

反正无论什么办法,具体要看你觉得怎么样合适才行的呢。还可以去找系统的进程列表,还可以测试某些环境变量啊,反正方法是很多的是死的,人是活的。
参考技术A 可以在某个指定路径下写一个文件,每次程序先检查该文件是否存在,存在就认为已经启动一个实例,退出时删除该文件 参考技术B 通过if(GetLastError() == ERROR_ALREADY_EXISTS)来进行判断,GetLastError()是API函数,该函数返回值为调用的线程的错误代码值(unsigned long),代码183(ERROR_ALREADY_EXISTS)表示文件已存在,无法创建该文件。例如:在你的工程名.cpp文件的InitInstance()函数中,添加如下代码:
if(GetLastError() == ERROR_ALREADY_EXISTS)

AfxMessageBox("已经有XX程序在运行!",MB_ICONEXCLAMATION);
return FALSE;
参考技术C 什么叫做一个程序实例?
你VC编译同一个工程能启动多个?还是你说的是在工程中启动线程?请说清楚一些

以上是关于C/C++中 如何只允许运行一个程序实例?多列一些方法。的主要内容,如果未能解决你的问题,请参考以下文章

C# WinForm中如何让当前应用程序只允许启动一个实例

用c++设计一个类,该类仅仅被允许实例化一次! 这题目是啥意思?求解

如何将数组从 PLC 程序传递到 TwinCAT 中的 C 模块实例?

如何强制 C# .net 应用程序在 Windows 中仅运行一个实例? [复制]

关于c语言中联合体/共用体中数据存放的问题?

C/C++程序中的event该如何理解