用delphi7写的一个网络服务器程,其中用到了两ServerSocket连接各客户端。用ADO连接后台数据库,软件是放在公网上运行的,有静态IP,外面有防火墙,整个服务器功能不是很复杂,但现在是运行一段时间后(时间无规律),软件会自动退出。也不弹出错误框。不知各位有没有遇见过,

解决方案 »

  1.   

    无法拦到退出事件,我在主form的close里也拦不到,在application.run后面拦也拦不到。不知它从哪里退出的,
      

  2.   

    不会被我kill的,公司有防火墙。而且其它都没有。有没有高手,出来说说啊
      

  3.   

    无法扑获到错误,退出时间等。就是不知它从哪里退出。根本就栏不到出错误的事件。在application.run后面拦也拦不到。不知它从哪里退出的。有没有更彻底的办法拦到退出事件。
      

  4.   

    To:yellowyellow(YellowYellow):
     我以前也见过程序错误太多就自动退出。但我现在的退出,是没有出现一个错误就自动退出。我在appliation.onexcept中没有接到一个错误信息,如果是内出错误,也会弹出错误框啊。而且最怪的是退出时怎么也拦不到它的出错误信息。我是在错误发生时写入.txt文件的。有没有更彻底的方法拦到出退出信息。我试过了很多方法了。主form 的onclose,ondestory,还有在application.run后都无法拦到。就是不知它从哪里退出的。
      

  5.   

    我最近也碰到一次,严重情况在调试的时候连delphi一起退出,很快。原因还没有找到,估计是多线程对指针和MemoryStream操作错误。
      

  6.   

    多数是 Exception 、内存使用的问题
      

  7.   

    也是,我的服务器软件,退出没有规律。软件是24小运行为公网服务的,有时会几十分钟就退出,有时一两天都不退。其中用到多线程,也用到memoryStream,但它们是分开的。不有在一些用。
      

  8.   

    我的是在主线程中动态的生成很多线程,然后将这些线程加在一个list里面,关闭的时候要全部终止这些线程。
    我调试的结果是:虽然线程已经在主线程中被终止,即Terminated是true,但是如果刚好在结束之前已经执行到线程的Execute里面,线程还是会继续执行下去的,但是主线程已经把它用到的一些资源给释放,这样就会报错,我把错误屏蔽后,不影响软件的使用,但是会退出。
    线程执行代码:
    while (not Terminated) do
    begin
      if Terminated then Exit;//此判断是后来加的,就因为这个出的错误。
    end;仅供参考,找了很久才找到。多线程就是麻烦。
      

  9.   

    主进程中断线程后,不要立即释放线程所用到的资源,最好应该再延迟一段时间等到线程正常中止。
    如:
    procedure TPHSSendThread.Execute;
    begin
      while not Terminated do begin
        ............
      end;
      __ThreadIsRun:=False;
    end;下面是主进程关闭事件:
      MyPHSThread.Terminate;
      while __ThreadIsRun do  __ThreadIsRun是一个Bool标志
        sleep(1000);
      //上面是等待线程正常中断完成,否则的话,主进程将关闭数据库连结导至线程出错。
      AC_Source.Close;
      AC_Dest.Close;
      CloseFile(LogFile);
      FreeAndNil(Q_Source);
      FreeAndNil(Q_Dest);
      FreeAndNil(AC_Source);
      FreeAndNil(AC_Dest);
      CoUnInitialize;
      

  10.   

    belllab(菜鸟) ( ) 信誉:100 的方法是设置一个全局变量,根据全局变量的标志来判断释放线程,这个方法对于一个线程来说应该可以。我的是动态生成很多个线程,只要一个线程中断,__ThreadIsRun 就会是true,这样显然是不行的,因为还有其他的线程在运行。而且线程并不一定在主进程关闭后才中断,随时中断现在生成的所有线程,释放线程的资源,然后再动态的生成一些另外的线程,所有我才用一个tlist来管理当前所有活动线程。如果楼主我到和我差不多的思路,应该就是这里的错误,原来我的程序也是不定时的退出,现在已经修改好。
      

  11.   

    To Dlwxn(蓝天) :
    我的程序是用一个数组来保存所有客户端的socket连接。在线程里根据要求对相应客户发送数据。可能也存在你所说的问题。主要是在客户断开连接时,可能线程还在发送数据。我现在是在发送时socket.luck。试试看行不行。觉得线程也就是麻烦。不知程序到底是一些什么情况就会自动退出呢。