要解决如下问题。
如果indey的Server控件发出命令客户端如果没有回应的话,那么线程肯定阻塞,有什么办法能让程序跳过继续运行呢?
如一段时间没有响应 就发出“链路不通”的命令,然后退回原来状态,并且在Thread中把这个阻塞的客户端线程给释放。
如果indey的Server控件发出命令客户端如果没有回应的话,那么线程肯定阻塞,有什么办法能让程序跳过继续运行呢?
如一段时间没有响应 就发出“链路不通”的命令,然后退回原来状态,并且在Thread中把这个阻塞的客户端线程给释放。
解决方案 »
- ◎◎◎◎◎◎◎ 关于TCP服务器端口的问题
- 求SQL查询语句 (可以结合Delphi实现)----本帖子只是看上去内容太多,其实没多少内容的。
- dxBarEdit1做检索内容输入框 回车才确定 否则text为空 ?
- 招聘delphi程序员
- 使用html help workshop制作chm帮助文件,别名文件和映象文件的制作格式不知道?在线!
- Delphi如何连结SqlServer数据库
- 如何实现这样的功能,有没有现成的控件?
- 请问有什么api函数可以做到这样的效果
- 还有一个问题!!!!!!!!!!!!!!!
- 怎样学可视化编程?
- 两个小问题,请大家帮忙出主意支招
- 在DELPHI中怎样利用EXCEL中的统计函数?
if 在定时器时间范围 then
begin
try
//你的操作
except
//关闭连接
end;
function TMainFRM.OperateForCOll(Command: String;
ResultLength: integer;Index: integer): String;
var
strtrans,strcommand,strresult:string;
i,bufflength:integer;
buffCommand,buffResult:array[0..1000] of byte;
List:TList;
begin
strtrans:='';
strcommand := Command;
strresult := '';
for i:=1 to length(strCommand) do
begin
if ((copy(strCommand,i,1)>='0') and (copy(StrCommand,i,1)<='9'))or((copy(strCommand,i,1)>='a') and (copy(strCommand,i,1)<='f'))
or((copy(strCommand,i,1)>='A') and (copy(strCommand,i,1)<='F')) then
begin
strTrans:=strTrans+copy(strCommand,i,1);
end;
end;
for i:=0 to (length(strTrans) div 2-1) do
begin
buffcommand[i]:=strtoint('$'+copy(strTrans,i*2+1,2));
end;
bufflength := (length(strTrans) div 2);
{向所连接的客户端发送一条命令}
StatusPanel1.Caption := '正在传送数据,请稍后..';
//-------------------------------------------------------------------发送接收开始
try
List := Idserver.Threads.LockList; TIdPeerThread(List.Items[Index]).Connection.WriteBuffer(buffcommand,bufflength);
{将所接收到的16进制命令存放到byte数组}
TIdPeerThread(List.Items[Index]).Connection.ReadBuffer(buffResult,ResultLength);
IdServer.Threads.UnlockList;
except
on E:Exception do
begin
showmessage('传输中出现错误:'+E.Message);
IdServer.Threads.UnlockList;
Result:='';
exit;
end;
end;
{将接收到得数据转化成16进制的字符串}
//----------------------------------------------------------------发送接收结束
for i:=0 to ResultLength-1 do
begin
strresult := strresult + inttohex(ord(buffResult[i]),2);
end; self.StatusPanel1.Caption:= '数据传送完毕';
Result:=strresult;