0

TIdTCPServer および TIdTCPClient コンポーネントを使用して Windows サービスと VCL アプリケーションを通信し (ログを送信する)、すべて正常に動作していますが、サービスはマルチスレッドであるため、ログ (メッセージ文字列) を送信するたびにVCL アプリケーションに対して、サービスでコンポーネント (TIdTCPClient) の新しいインスタンスを作成する必要があります。問題は、これを回避し、 TIdTCPClientウィンドウ サービス側でコンポーネント の一意のインスタンスを 1 つだけ使用するにはどうすればよいかということです。

4

1 に答える 1

2

TIdTCPClient複数のスレッドがまったく同時にメッセージを送信できず、誤って互いにオーバーラップしないように、単一のインスタンスを作成してアクセスをシリアル化するだけで済みます。

TIdTCPClientを独自の専用スレッドに移動することをお勧めします。これは、接続状態を監視し、サーバーがダウンしたり再起動したりした場合に自動的に再接続できるスレッドですTIdThreadSafeStringListTIdTCPClientチェックを定期的にキューに入れ、必要に応じて送信します。そうすれば、ワーカー スレッドは にTIdTCPClient直接アクセスせず、接続がダウンしている間も、接続が再確立されたときに送信するメッセージを収集できます。

アプリ側では、サービスから一度に 1 つの接続のみを受け入れることができる場合、使用TIdTCPServerは少しやり過ぎかもしれません。TIdSimpleServer代わりに使用することを検討してください。

于 2013-08-15T01:24:24.803 に答える