0

問題は複雑すぎる。非常に簡単な解決策は、Uwe と David が提案したように再設計することです。

(1) ワーカーアプリ。(2) クライアントを待機し、ワーカーを呼び出す、長時間実行される TcpServer (3) クライアント。

========================

SampleApp次のように機能するを構築したいと思います。

  • SampleApp起動すると、すでに実行されているかどうかがチェックされます。
  • そうでない場合、 a TcpServer、 aを開始し、TcpClient特定のコマンドを から に渡し、作業を行い、 を閉じ、終了します。TcpClientTcpServerTcpServer
  • はいの場合、 を開始しTcpClient、コマンドを他のコマンドに渡してTcpServer終了します。(他のTcpServer人が仕事をします。)
  • SampleApp最初の 1 つがまだ実行されているときに、複数が開始されている可能性があります。

たとえば、この問題を実際に解決する方法がわかりません。

  1. どのアーキテクチャから始めるか? (定評のある OmniThreadLibrary は、OS プロセス ベースの同時実行ではなく、スレッド ベースの同時実行を処理しているようです。)
  2. SampleAppランニングはありません。2 つSampleAppが (ほぼ) 同時に開始されます。TcpServer が 1 つだけ開始されることを保証するにはどうすればよいですか? (入ってくる「プレイヤー」を登録するための「グローバルリスト」はありません。)
  3. 1本SampleApp走っています。2 番目が 1 番目のミューテックスを検出し、TcpClient であると決定した場合に、1 番目が TcpServer を停止して終了した場合の処理​​方法は?

どんな洞察も大歓迎です!

4

1 に答える 1

0

これを主に (単一のユーザー セッションで) 単一のコンピューター上のプロセス間で通信するために使用する場合は、ActiveX オートメーション オブジェクトを使用する必要があります。LocalServer を使用する COM オブジェクトを作成すると、「サーバー」プロセスの開始と停止が行われます。

詳細はこちら: http://docwiki.embarcadero.com/RADStudio/XE4/en/Creating_an_Active_Server_Object

TTcpServer の使用を主張する場合、2 つのプロセスが (ほぼ) 同時に開始された場合でも、特定の TCP ポートにバインドできるのは 1 つだけであり、TTcpServer で Listen を呼び出すと、もう 1 つのプロセスは例外を受け取ります。

于 2013-08-28T16:04:06.267 に答える