C ++でアプリケーションの二重実行を停止して、アプリケーションの1つのインスタンスのみが一度に実行されるようにする方法はありますか?
編集: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 クラスの設計パターンに従って問題を解決できます。いつでも、最大 1 つのオブジェクトが作成されます。