2

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


编辑:Windows 7

4

3 回答 3

3

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

以下是您在 Mac OS X 上的操作方法。如您所见,方法可能不同,取决于您想要什么。

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

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

于 2012-08-21T02:16:24.637 回答
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;
    }
}
于 2012-08-21T10:29:29.927 回答
-1

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

于 2012-08-21T14:35:59.830 回答