使用 Delphi XE2 中的 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;