0

現在、以下を使用するリソース ライトの「管理されていない」Windows C++ アプリケーションがあります。

  • CreateMutexアプリケーションのインスタンスが最大で 1 つであることを確認します。

  • COPYDATASTRUCT別のインスタンスが起動を試みた場合に、その単一のインスタンスにコマンド ライン パラメータを渡す (データを送信した後、終了します)。

使用例は単純です。新しいアプリケーション インスタンスを起動して、コマンド ラインで指定されたファイルを開くか、以前に起動したアプリケーション インスタンスでファイルを開きます。

Haskell プログラムで同じ動作を実現するにはどうすればよいですか?

4

1 に答える 1

0

GHCに同梱されているパッケージCreateMutexには含まれていないようです。FFIを使用して自分でバインドするか、クロスプラットフォームの方法でエミュレートする必要があります。Linux で一般的に使用されるトリックの 1 つは、特定のファイル名を選択して「ミューテックス」として機能させることです。存在しない場合は、作成して連絡先を書き留め、終了時に削除します。存在する場合は、そこから連絡先情報を読み取って、既に実行中のプロセスに接続する方法を見つけます。このアプローチには欠点があります。アプリまたはコンピューター全体がダウンした場合、連絡先情報が古くなります。Win32

IPC については、クロスプラットフォームのインターフェースがいくつかあると思います。ウィキペディアには優れたリストがあります。Haskell でこのタスクを実行するのに特に適しているのは、sockets(named) pipes、およびdbusです。後者の 2 つは、最終的に UNIX パッケージのインストールに依存するため、Cygwin が必要になる場合があります。

于 2012-07-15T14:34:35.373 に答える