繁体   English   中英

如何在XE2中中止TSQLConnection连接尝试?

[英]How to abort a TSQLConnection connect attempt in XE2?

使用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;

我想到这一点,如果ConnectTimeout不起作用,那么你可以用另一种方式解决这个问题

首先在连接尝试通过例如Indy组件ping目标主机(如果这不是本地主机;-))或更好的尝试telnet服务端口(也由Indy) - 我想这是最简单的认为你现在可以做什么而不杀线程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM