2017-07-28 13 views
1

私はIndy 10(Delphi 2009から)を使用してTCPサーバを構築しています。 OnExecuteイベントでは、私はメインスレッドからいくつかのデータにアクセスする必要があります。そのデータをサーバースレッドに渡すことは可能ですか?サーバーはIdTCPServer1.Active:=True;で開始されていますので、いくつかのパラメーターを渡す方法はわかりません。Indy TCP Serverをパラメータで起動するには?

+0

データが変更され、*スナップショット*を作成する場合は、それらをコピーし、参照パスをコピーします。カスタムの 'TIdServerContext'クラスを使用します。 – Victoria

+0

私はDelphi 2009でそのクラスを持っていません。私はそれを探しました。 –

+0

ユニット[IdCustomTCPServer](https://github.com/graemeg/indy/blob/master/Lib/Core/IdCustomTCPServer.pas#L307)。しかし、それは必要ではないかもしれません。実行スレッドに渡すデータは何ですか?データ型は何ですか?サーバーが稼動しているときに変更されますか? – Victoria

答えて

3

TIdTCPServerに追加パラメータを渡すことはできません。サーバイベントハンドラは、必要に応じてメインスレッドからデータを取得する必要があります。

イベントごとに接続ごとのデータを追跡するには、TIdContext.Dataプロパティを使用するか、TIdServerContextからカスタムクラスを派生させてTIdTCPServer.ContextClassプロパティに割り当てます。たとえば、OnConnectイベントハンドラは、TIdSyncまたはTThread.Synchronize()を使用してメインスレッドから最新のデータを取得し、OnExecuteのコンテキストでキャッシュして使用することができます。

関連する問題