DelphiXE2のTSQLConnectionコンポーネントを使用してDataSnapサーバーに接続します。
私の問題は、3秒後に接続できない場合に接続の試行を中止したいのですが、ドライバーのConnectTimeoutプロパティを設定しても影響はないようです(それでも約20秒待ってからあきらめます) 。
私はこれをスレッド内で実行しているので、スレッドにメッセージを投稿できます(スレッドメッセージキューがどのように処理されるかは、このブロッキング呼び出しがどのように作成されたかによって異なります)。スレッドメッセージハンドラーが実行されたとしても、TSQLConnection.Connectedプロパティ(スレッドのExecuteメソッド内で設定される)を設定するための呼び出しのブロックをどのように中断するかがわかりません。
TerminateThreadを呼び出さない方がいいと思います。これはやり過ぎのようであり、(正しく理解していれば)スレッドのスタックに割り当てられたメモリを残すためです。この接続プロセスを中断する方法、または基盤となるIndyコンポーネントにアクセスして、接続タイムアウトを明示的に設定する方法についてのアイデアをいただければ幸いです。
ありがとう!
fConnection := TSQLConnection.Create(nil);
with fConnection do
begin
DriverName := 'DataSnap';
Params.Values['CommunicationProtocol'] := 'tcp/ip';
Params.Values['DatasnapContext'] := 'datasnap/';
Params.Values['HostName'] := '127.0.0.1';
Params.Values['Port'] := '211';
Params.Values['ConnectTimeout'] := '3000';
KeepConnection := true;
LoginPrompt := true;
end;
// Where it blocks for up to 20 seconds (if host unavailable)
fConnection.Connected := True;