有什么方法可以停止 C++ 中应用程序的双重执行,以便一次只运行一个应用程序实例?
编辑:Windows 7
在 C++ 标准中没有办法做到这一点。您需要的是使用底层平台提供的机制。例如,以下是您在 Windows 上的操作方式。
以下是您在 Mac OS X 上的操作方法。如您所见,方法可能不同,取决于您想要什么。
它归结为检查您的应用程序是否正在运行,然后退出。
这里有更多方法可以检查您的应用程序是否在 Windows 上运行(代码使用不同的语言,但概念相同)
如果您需要跨平台解决方案,可以使用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;
}
}
您可以按照 Singelton 类设计模式来解决您的问题。在任何时候,它都会创建最多一个对象。