我听说iDTcp是阻塞式的,那如果我的client端用writeln发送一条命令后要用readln等待返回信息,以判断是否执行正确,而这个时间间隔可能是45秒,那么会不会client跟死机一样(不接收其他信息?)  
如果是用什么办法处理?  
如果我想用动态创建多个TCPClient来处理此事,可行吗?

解决方案 »

  1.   

    放一个IndyMisc里面的 IdAntiFreeze或者用线程
      

  2.   

    这个时间间隔不可能会是45秒。如果你怕冻结的话,只须添加一个TIdAntiFreeze就行了。  Indy使用一个特殊的组件TIdAntiFreeze来透明地解决客户程序用户界面“冻结”的问题。TIdAntiFreeze在Indy内部定时中断对栈的调用,并在中断期间调用Application.ProcessMessages方法处理消息,而外部的Indy调用继续保存阻塞状态,就好像TIdAntiFreeze对象不存在一样。你只要在程序中的任意地方添加一个TIdAntiFreeze对象,就能在客户程序中利用到阻塞式Socket的所有优点而避开它的一些显著缺点。