IndyFTP在changedir时出现死锁
卡住不动了也不返回异常
我尝试着把Indyftp.pas打开看到
changedir是发送sendcmd('CWD DIRNAME ReturnValue);
于是觉得这个问题对我来说有难度
后来想到多线程,可是有些服务器限制1线程
而且这个问题还将出现,这时只能TerminateThread
但是很多书明确指出这个函数使线程未完成就结束
无法回收内存等打开资源我的indy是delphi7自带的,WinXP系统

解决方案 »

  1.   

    Delphi6中带的IndyFTP有问题,D7中的没用过
    当时用d6中IndyFTP出现Cpu占用100%的问题,查了好久才查到是IndyFtp的问题后来用Win API自己写了一个简单的FTP函数,问题解决所以不推荐用IndyFTP
      

  2.   

    原讨论贴:※※※※◆◆ 难题!!! CPU 占用100%,该如何解决 ◆◆※※※※
    http://topic.csdn.net/T/20041118/09/3563622.html
      

  3.   

    难道就是这个答案吗?
    哎,对抛弃indyftp的想法表示120分的不理解
    遇到这样的问题居然没有任何办法
    连高手都说换WinAPI去做.
      

  4.   

    在D6中曾想办法解决的,可没有IndyFtp的源码,现在D7中是有源码了
    又没那么多时间去看了,呵呵不敢称为高手,在不断的学习中
      

  5.   

    在C:\Program Files\Borland\Delphi7\Source\Indy\IdTCPConnection.pas文件中
    有如下说明
    {2002-04-12 - Andrew P.Rybin
      - ReadLn bugfix and optimization
    2002-01-20 - Chad Z. Hower a.k.a Kudzu
      -WriteBuffer change was not correct. Removed. Need info on original problem to fix properly.
      -Modified ReadLnWait...
    看来Chad Z. Hower a.k.a Kudzu曾发现ReadLnWait有问题
    所以他Modified ReadLnWait
    加入参数AFailCount
    function ReadLnWait(AFailCount: Integer = MaxInt): string;
    这样默认在读MaxInt(=32767)次都为无效数据后才放弃曾经读取的内容.
    可能是因为MaxInt太大
    导致了凡是引用IdTCPConnection发送命令的操作均可能因浪费资源而死锁
    ------------
    所以我想尝试定义AFailCount: Integer = 较小的数字,例如
    function ReadLnWait(AFailCount: Integer = 50): string;
    在一个小时的测试中暂时没有出现死锁问提