检测app C ++的双重执行

时间:2012-08-21 02:09:52

标签: c++ execution

有没有办法在C ++中停止双重执行应用程序,因此只有一个应用程序实例同时运行?


编辑:Windows 7

3 个答案:

答案 0 :(得分:3)

在C ++标准中无法做到这一点。您需要的是使用底层平台提供的机制。例如,这是how you would do it on Windows

Here is how you might do it on Mac OS X。如您所见,这些方法可能有所不同,取决于您的需求。

归结为检查您的应用程序是否正在运行,然后退出。

Here are a few more ways检查您的应用程序是否在Windows上运行(代码使用不同的语言,但概念相同)

答案 1 :(得分:1)

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

#include <iostream>
#include <boost\interprocess\sync\named_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;
    }
}

答案 2 :(得分:-1)

您可以按照Singleton类设计模式来解决您的问题。在任何时候它都会创建一个对象的最大值。