换到D7以后我们只有用INDY来实现SOCKET,只是做了个很小的chat试验程序,并且indy的DEMO也有这样的程序,我启动服务端程序,再启动客户端程序,我在客户端发一通消息,然后关闭服务器,出现无法关闭服务器程序,提示线程关闭超时,显然是"阻塞"到这儿了,最难过的是这种错误程序本身还关不掉.
此时我真的怀念以前的Tsocketserver/Tsocketclient,并且最好哪位有原生socket做的通讯程序能发我一份.

解决方案 »

  1.   

    怎么断??var 
       ServerThreads : TThreadList;procedure xform.create(sender)
    begin
       ServerThreads := TThreadList.create;
    end;
    procedure xform.create(sender)
    var
     i : integer;
     pThread : pointer;
    begin
       for i:= 0 to serverThreads.locklist.count - 1 do begin
            pThread := serverThreads.locklist.items[i];
            serverThreads.locklist.remove(pThread);
            serverThreads.locklist.delete(i);
       end;
       serverThreads.unlocklist;
    end;我随便写了几句,你看是这样吗?
      

  2.   

    呵呵每二个事件应该是xform.close只顾copy,忘了改过来.
      

  3.   

    indy带的几个demo我都试了全有这种情况发生,不知道既然DEMO有这种运行上的问题为何还要将其示人,真的还不如以前非阻塞的情况自己在服务端创建线程存入TLIST中,通过分析消息的握手信号自己来决定线程的RESUME还是TERMINATE,这种阻塞我总感觉不得要领,动不动就报错了,动不动屏幕就不动了,加了所谓的TIDANTIFREEZE也是没办法,因为阻塞发生时被优先处理,如果您有合适的例子是否可以发一份给我,相应代码很短