是不是有一个tcp连接的时候无法连接,所以要等timeout了!

解决方案 »

  1.   

    tcp处理连接中断很慢,但是不会有几分钟的
    帮你up
      

  2.   

    sdcx,这也是一个问题,有时候一个线程的TCP连接有问题,发生异常,正如superyiman所说,处理速度很慢,但同时会影响到所有其它的线程,导致程序处理速度大大下降,不知道如何处理才能避免这样的停顿呢?最后那个线程往往是成功的,只是关闭得非常的慢,偶然也会很快的。另外,由于各线程是共享主线程的一个TSTRINGLIST作为LOG的输出,会不会在这里大家顶住了呢?
      

  3.   

    由于代码很长,而且处理数据过程比较复杂,我就不详细讲,讲讲要点看大伙能不能帮我一把。首先,我是利用数组建立线程的,也就是
    var
      mythread: array[1..10] of tmythread
    begin
      for i:=1 to 10 do
      begin
        mythread[i]:=tmythread.create;
        mythread[i].xxxx;
        .....
      end;
    end;我把线程都设置成freeonterminate的了。然后线程中有三个共享主线程的过程。
    一是读数据,从Mainform里读一个TStrings的数据来处理,在EXECUTE的循环里每次都用到。然后一个是想Mainform里的一个Memo回写出错的LOG信息的,只在异常中用到。最后在execute方法末,我调用到mainform.threaddone来处理结束线程。这个过程主要是一个记数器,每次调用其中一个全局变量就会加一,这样当着个变量和线程数量相等的时候,程序便认为所有线程已经完成了,显示提示信息说工作完成。第一个问题是,当其中一个线程遇到问题,马上会影响到整个程序的运行。我的程序10个线程一开始可以一秒处理大概3-40个数据和连接,但当遇到第一个错误,马上下降到3-4个/秒,如果继续遇到错误,甚至会几秒也处理不了一个连接和数据,但我从LOG看来也不是所有线程都遇到错误,肯定是正确的线程也被阻碍了。第二个问题就是最后一个线程呆滞的问题。我让他们在THREADDONE的时候往LOG里写记录,前9个结束的都很快,惟独最后第10个等了好长时间,甚至几十分钟才写出来,都不知道它干什么去了。我试过如果不建立任何连接,只是读入数据然后在LOG里回写的话,一切都很正常的,速度很快,也就说明读数据和写LOG的共享主线程都不会互相阻碍的。如果只使用到UDP连接部分,速度还可以,但遇到异常会使整个程序处理明显变慢,从3-400个/秒到几十或者几个每秒,但很快就可以恢复速度。但一用到TCP连接部分,遇到异常就马上慢得离谱了,已经到了无法接受的程度。
      

  4.   

          光有自然语言描述是不好看出问题的,因为你认为你做到了哪些可能你并没有做到,
                   关于用mainform.threaddone来记数(已经完成的线程),我以前接手的一个程序也这么做,但这种方法似乎并不好,经常记数错误码,我后来的处理是在主线程中的适当地方判断,
                     DoneCount:=0;
                     for i:=1 to maxCount do
                        if not (mythread[i]=nil)
                        then  DoneCount:=DoneCount+1;                    if (DoneCount=maxCount)
                        then myEnd;
    不明白啊。
    可能你线程中的代码有问题吧,先不妨只建一个线程或者两个线程来调试?这样容易发现问题些。