アプリケーションの複数のインスタンスが開かれないようにするクロスプラットフォームの方法

アレクサンドル・イリミア

これらの質問同じプログラムの 2 つのインスタンスの実行をブロックする方法は? C または C++ で単一のインスタンス アプリケーションを作成する方法、およびアプリケーションの複数のインスタンスを防止する方法では、プラットフォームで同じアプリケーションの複数のインスタンスが開かないようにする方法について具体的に説明しています ( WindowsLinux)。

これを実現するクロスプラットフォームの方法はありますか?

アレクサンドル・イリミア

他の質問でこれに対処している他の人が見つからなかったので、私の質問に答えます。

これは、boost/interprocess/sync/named_mutex(私が使用したboost 1.63を使用してクロスプラットフォームの方法で実現できます。

と の両方LinuxテストしましたがWindows、実装により、アプリケーションの 2 番目のインスタンスを開くことができません。

私が見つけた問題は、プロセスを (両方のプラットフォームで) 強制終了すると、デストラクタ~MyApplicationが呼び出されないため、ミューテックスが削除されないことです。したがって、システムを再起動した後でのみ、アプリケーションを再度実行できます。

#include <boost/interprocess/sync/named_mutex.hpp>
#include <iostream>

class MyApplication
{
public:
    MyApplication() = default;

    ~MyApplication()
    {
        if (mLockedByThisInstance)
        {
            boost::interprocess::named_mutex::remove("myApplicationMutex");
        }
    }

    bool IsAlreadyRunning()
    {
        mLockedByThisInstance = mNamedMutex.try_lock();

        if (!mLockedByThisInstance)
        {
            return true;
        }

        return false;
    }

    int Run(int argc, char *argv[])
    {
        // Application main loop            
        return 0;
    }

private:
    bool mLockedByThisInstance = false;
    boost::interprocess::named_mutex mNamedMutex{ boost::interprocess::open_or_create,
        "myApplicationMutex" };
};

int main(int argc, char *argv[])
{
    MyApplication myApplication;

    if (myApplication.IsAlreadyRunning())
    {
        std::cout << "MyApplication is already running!\n";
        return 1;
    }

    return myApplication.Run(argc, argv);
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

デスクトップアプリケーションデータをPythonのクロスプラットフォームの方法で保存するにはどうすればよいですか?

分類Dev

Avaloniaはどのようにクロスプラットフォームアプリケーションを開発していますか?

分類Dev

MRTKを使用してクロスプラットフォーム展開用に単一のアプリケーションをセットアップするにはどうすればよいですか?

分類Dev

ソケットは単一のインスタンスを作成しています。複数のクライアントからこのアプリケーションを作成するにはどうすればよいですか?

分類Dev

デフォルトのプログラムリストにアプリケーションを追加するにはどうすればよいですか

分類Dev

複数のbeanstalkアプリケーションインスタンスから1つのawscloudwatchストリームにログインする方法

分類Dev

ペイロード付きのカスタムメッセージをボットからクライアントアプリケーションにダイレクトライン経由で送信するにはどうすればよいですか?

分類Dev

クロスプラットフォームとプラットフォームに依存しないフレームワークの違いは何ですか?Qtアプリケーションフレームワークの特定のケース

分類Dev

クロスプラットフォームアプリケーション用のXamarinFormsのsqliteデータベースに画像を保存する方法は?

分類Dev

リスト内のアイテムがC#ウィンドウフォームアプリケーションのカスタムオブジェクトであるときに、CheckedListBoxのボックスをチェックするにはどうすればよいですか?

分類Dev

アプリケーションのユーザーが、ログイン時にアプリを起動するかどうかを選択できるようにします。実装するための最もクロスプラットフォームの方法は?

分類Dev

アプリケーションのユーザーが、ログイン時にアプリを起動するかどうかを選択できるようにします。実装するための最もクロスプラットフォームの方法は?

分類Dev

アプリケーションの複数のインスタンスをVisualStudioからServiceFabricクラスターに公開するにはどうすればよいですか?

分類Dev

Xamarin.Formsクロスプラットフォームアプリケーションを作成するときに、「このプロジェクトをロードするにはVisualStudioの更新が必要です」というエラーが表示されます

分類Dev

アプリケーションで使用されるそのタイプのリストが複数ある場合に、モデルにカスタムオブジェクトシーケンスプロパティを保持する方法

分類Dev

Java Webアプリケーションのlibフォルダーにカスタムjarを公開するにはどうすればよいですか?

分類Dev

Dockerを使用して、1台のサーバーで実行されている複数のアプリケーションにクライアントがアクセスできるようにするにはどうすればよいですか?

分類Dev

JavaクロスプラットフォームGUIアプリケーション(Windows、Linux)を作成するにはどうすればよいですか?どのツールを使用すればよいですか?

分類Dev

一部のアプリケーションを除いて、システム全体のすべてのアプリケーションをブロックするようにWindowsファイアウォールを構成しますか?

分類Dev

アプリケーションのクライアントがクラス/パッケージを簡単に拡張できるように、フレームワークでクラス/パッケージをよりよく整理する方法は?

分類Dev

dockerはアプリケーションをクロスプラットフォームにするためのソリューションですか?

分類Dev

特定のTargetTypeのないアプリケーション用の複数のカスタムフォント

分類Dev

どのクロスプラットフォームモバイルアプリケーションがBlackberryを適切にサポートしますか?

分類Dev

Android-アプリケーションのファイルの「ブラックリスト」を作成するにはどうすればよいですか

分類Dev

OS Xアプリケーションをフォルダにドラッグするだけでよいのに、なぜWindowsアプリケーションをインストールする必要があるのですか?

分類Dev

Cocoa Mac Os Xデスクトップアプリケーションで、拡張子のないファイルをアプリのアイコンにドラッグできるようにプロジェクトを構成できますか?

分類Dev

.NET Core1.1でアプリケーションデータのディレクトリを取得するクロスプラットフォームの方法

分類Dev

アプリケーションがサーバーからホストされているときに、ユーザーファイルのローカルデスクトップパスを取得するにはどうすればよいですか?

分類Dev

異なるフォントを使用するためにselectの各オプションのスタイルを設定するにはどうすればよいですか(マテリアライズCSSフレームワークを使用)

Related 関連記事

  1. 1

    デスクトップアプリケーションデータをPythonのクロスプラットフォームの方法で保存するにはどうすればよいですか?

  2. 2

    Avaloniaはどのようにクロスプラットフォームアプリケーションを開発していますか?

  3. 3

    MRTKを使用してクロスプラットフォーム展開用に単一のアプリケーションをセットアップするにはどうすればよいですか?

  4. 4

    ソケットは単一のインスタンスを作成しています。複数のクライアントからこのアプリケーションを作成するにはどうすればよいですか?

  5. 5

    デフォルトのプログラムリストにアプリケーションを追加するにはどうすればよいですか

  6. 6

    複数のbeanstalkアプリケーションインスタンスから1つのawscloudwatchストリームにログインする方法

  7. 7

    ペイロード付きのカスタムメッセージをボットからクライアントアプリケーションにダイレクトライン経由で送信するにはどうすればよいですか?

  8. 8

    クロスプラットフォームとプラットフォームに依存しないフレームワークの違いは何ですか?Qtアプリケーションフレームワークの特定のケース

  9. 9

    クロスプラットフォームアプリケーション用のXamarinFormsのsqliteデータベースに画像を保存する方法は?

  10. 10

    リスト内のアイテムがC#ウィンドウフォームアプリケーションのカスタムオブジェクトであるときに、CheckedListBoxのボックスをチェックするにはどうすればよいですか?

  11. 11

    アプリケーションのユーザーが、ログイン時にアプリを起動するかどうかを選択できるようにします。実装するための最もクロスプラットフォームの方法は?

  12. 12

    アプリケーションのユーザーが、ログイン時にアプリを起動するかどうかを選択できるようにします。実装するための最もクロスプラットフォームの方法は?

  13. 13

    アプリケーションの複数のインスタンスをVisualStudioからServiceFabricクラスターに公開するにはどうすればよいですか?

  14. 14

    Xamarin.Formsクロスプラットフォームアプリケーションを作成するときに、「このプロジェクトをロードするにはVisualStudioの更新が必要です」というエラーが表示されます

  15. 15

    アプリケーションで使用されるそのタイプのリストが複数ある場合に、モデルにカスタムオブジェクトシーケンスプロパティを保持する方法

  16. 16

    Java Webアプリケーションのlibフォルダーにカスタムjarを公開するにはどうすればよいですか?

  17. 17

    Dockerを使用して、1台のサーバーで実行されている複数のアプリケーションにクライアントがアクセスできるようにするにはどうすればよいですか?

  18. 18

    JavaクロスプラットフォームGUIアプリケーション(Windows、Linux)を作成するにはどうすればよいですか?どのツールを使用すればよいですか?

  19. 19

    一部のアプリケーションを除いて、システム全体のすべてのアプリケーションをブロックするようにWindowsファイアウォールを構成しますか?

  20. 20

    アプリケーションのクライアントがクラス/パッケージを簡単に拡張できるように、フレームワークでクラス/パッケージをよりよく整理する方法は?

  21. 21

    dockerはアプリケーションをクロスプラットフォームにするためのソリューションですか?

  22. 22

    特定のTargetTypeのないアプリケーション用の複数のカスタムフォント

  23. 23

    どのクロスプラットフォームモバイルアプリケーションがBlackberryを適切にサポートしますか?

  24. 24

    Android-アプリケーションのファイルの「ブラックリスト」を作成するにはどうすればよいですか

  25. 25

    OS Xアプリケーションをフォルダにドラッグするだけでよいのに、なぜWindowsアプリケーションをインストールする必要があるのですか?

  26. 26

    Cocoa Mac Os Xデスクトップアプリケーションで、拡張子のないファイルをアプリのアイコンにドラッグできるようにプロジェクトを構成できますか?

  27. 27

    .NET Core1.1でアプリケーションデータのディレクトリを取得するクロスプラットフォームの方法

  28. 28

    アプリケーションがサーバーからホストされているときに、ユーザーファイルのローカルデスクトップパスを取得するにはどうすればよいですか?

  29. 29

    異なるフォントを使用するためにselectの各オプションのスタイルを設定するにはどうすればよいですか(マテリアライズCSSフレームワークを使用)

ホットタグ

アーカイブ