检测应用程序C++的双重执行

Detect double execution of app C++

本文关键字:执行 应用程序 C++ 检测      更新时间:2023-10-16

有什么方法可以停止C++中应用程序的双重执行,从而一次只运行一个应用程序实例吗?


编辑:Windows 7

在C++标准中没有办法做到这一点。您需要的是使用底层平台提供的机制。例如,以下是您在Windows上的操作方法。

下面是你在Mac OS X上的操作方法。正如你所看到的,方法可能会有所不同,这取决于你想要什么。

它可以归结为检查您的应用程序是否正在运行,然后如果正在运行则退出。

以下是检查应用程序是否在Windows上运行的更多方法(代码使用不同的语言,但概念相同)

如果您需要跨平台解决方案,可以使用Boost.Interprocess:

#include <iostream>
#include <boostinterprocesssyncnamed_mutex.hpp>
int main(int, char **argv) {
    using namespace boost::interprocess;
    using namespace std;
    static const char *unique_name = "xyzzy";
    try {
        named_mutex justonce(create_only, unique_name);
        cout << "running..." << endl;
        char c;
        cin >> c;
        named_mutex::remove(unique_name);
    } catch (interprocess_exception) {
        cout << "already running..." << endl;
    }
}

您可以按照Singelton类的设计模式来解决您的问题。在任何时候,它都将创建最多一个对象。