应该作完你自己应该做的....
在Application.Terminate;

解决方案 »

  1.   

    应该不是吧,我在W2K里不管资源有没有回收只要执行Application.Terminate后内存就马上回收了,
      

  2.   

    是的,borland也推荐这样结束程序
      

  3.   

    不过你要释放一些资源(外部)就不可以了,比如关闭串口等。不过属于这个APPLICATION的都可以安全释放。
      

  4.   

    用Application.Terminate能够安全并且彻底地退出应用程序吗?
    //结束一个应用程序不用不同的方法
    正如
    Focus(老鱼) 所说
     application.Terminate在一定条件下是可以的 ,有时它可能引起非法操作,或是就无法关闭应用程序;因为application.Terminate是要处理完所有的消息才结束应用程序,在意思上而言,不是正真的强得结束;但是如果你用application.halt的话,就会强行结束;
    所以,你应该根据实际情况看;
    但一般情况下是用application.Terminate;
      

  5.   

    Tob, 是真的吗?
    Borland 真的这样说吗?
      

  6.   

    认同Focus(老鱼)的看法,Application.Terminate有时会非法操作
      

  7.   

    但是Borland文档上说,当主窗口关闭后程序就自动结束了。因此我都是采用MainForm.Close来结束应用程序的。各位高人,这样会造成问题吗?
      

  8.   

    还是在结束的时候把相应的资源都释放了再关闭程序吧。ChipHead(满脑袋芯片和程序的人) :你的名字真酷。如果你的资源都适时的释放了,那还会有什么问题呢?
      

  9.   

    ChenAndy: 谢谢夸奖。Borland的文档还说,TComponent的子类的构造函数是Create(AOwner: TComponent),当AOwner被销毁时,它的子对象也就销毁了。不知道是不是这样?也就是说,假如:
    var
      A,B: TComponent;
    begin
      A.Create(nil);
      B.Create(A);
      A.Free;
    end;
    这时候不需要调用B.Free我的理解是这样的,但因为不知道VCL底层的原理,所以总是非常担心这样会造成内存泄漏。哪位高手能够详细讲解一下?
      

  10.   

    必须首先结束所有的子线程,而且要保证主线程处于Idle状态
      

  11.   

    close is the best!
    but .terminate can close a app safely
    donot use .halt except your app no response!
      

  12.   

    var
          A,B:  TComponent;
      begin
          A.Create(nil);
          B.Create(A);
          A.Free;
      end;
      这时候不需要调用B.Free因为这时A是B的Owner,当A被Free时,会将所有它管理的对象实例Free,所以,如果再写B.Free反而会错,因为B已经释放了。
      

  13.   

    Application.Terminate比用Form.close要好的多,尤其是刚开始不习惯去释放资源
      

  14.   

    是的
    TComponent的子类的构造函数Create(AOwner:  TComponent)
    当AOwner被释放时他的子对象也就同时被释放了,这个过程Delphi会自动调用!
    所以不必但心会出现问题!相信我们的Delphi
      

  15.   

    如果是在一个循环里面用application.terminate,而这个循环是在一个函数中,那么可能它不会立即关闭,而且很有可能会导致非法操作。
      

  16.   

    其实Application本身就是一个Form,只是大小为0,application是继承Form单元的,它才是真正意义上的主窗口,实际上application检查到mainform被关闭后就结束应用程序,terminate做的是跳过检查而已,当然如liuchcn所说必须合法调用terminate,其他的如释放资源等大家都已经说了。
      

  17.   

    其实Application才是真正的主窗口,因为它是继承form单元的,application有一个消息循环,检查到mainform关闭就结束应用程序并释放资源,terminate所做的就是结束应用程序,和mainform.close实质是一样,当然如果你是在主窗口,那么建议你还是close
      

  18.   

    我有点吃惊,因为我从TP5开始到现在就一直使用halt,而且任何地方也使用halt;没有terminate也没有application,不知道这有没有问题?
      

  19.   

    cyberian(cyberian):我有点不太明白,Application是主窗体吗?它是继承Form单元的吗?Application是一个变量,TApplication is the type used for a Delphi Windows application.TApplication的上一个类是TComponent。TForm1 = class(TForm) ,他两有共同的父类。以下是对TApplication的描述
    DescriptionTApplication encapsulates a Windows application. The methods and properties introduced in TApplication reflect the fundamentals established in the Windows operating system to create, run, sustain, and destroy an application. TApplication thereby simplifies the interface between the developer and the Windows environment. For this purpose TApplication encapsulates behavior for:Windows message processing.
    Context-sensitive online help.
    Menu accelerator and key processing.
    Exception handling.
    Managing the fundamental parts defined by the Windows operating system for an application, such as MainWindow, WindowClass, and so on
    halt是强行关闭应用程序且返回到操作系统,他是一个过程,DELPHI定义的。
      

  20.   

    是的,borland也推荐这样结束程序
      

  21.   

    ownyou(轻舟) : borland什么地方什么时间说的呢?我想考证一下。
      

  22.   

    老实说,我更喜欢用Halt来关闭应用程序,因为使用Application.Terminate往往会使你的应用程序蹦出一大堆的错误提示,很烦,还不如自己在处理异常时自己释放资源,然后直接就.....Halt,嘿嘿!!
      

  23.   

    用Application.Terminate退出程序应该是没有什么问题。
      

  24.   

    application.terminate能退出多线程程序吗?
      

  25.   

    我也是,我喜欢用halt函数来结束程序的运行,其实最好用application.terminate来退出您的程序运行!
      

  26.   

    第一,Application.Terminate可以Free掉正常的Form不包括owner被设为nil的Form;其它自己建立的对象和TThread会怎样不用说了吧,一切秘密都在owner中。
    第二,halt方法太霸道,不会Free掉任何form的,不到万不得以不要用吧!
      

  27.   

    不是绝对的啊。。
    terminate可以理解为通过pcb中的记录释放application登记的资源,但是我想pcb中没有登记的资源是不会自动释放的,比如打开的驱动程序句柄。thread会释放的,因为thread是运行在application登记在pcb中的地址范围内。
    halt估计就是简单的从系统队列中摘除掉pcb把。。
    -------
    以上都是个人猜想。
      

  28.   

    对!不是绝对的!
    我用TERMINATE结束程序后,
    然后DELE程序,报源程序还在使用的错!T
      

  29.   

    我看还不如用SendMessage(HANDLE,WM_CLOSE,0,0);
      

  30.   

    Application.Terminate = PostQuitMessage!!!
    能否XXXXXX,问老Bill去!!!
      

  31.   

    你说的问题不一定能够是程序完全退出,如果你再程序中没有自己申请资源,那么是用application.terminate的时候就会完全退出,如果你自己申请了资源,必须作出释放,否则,在退出程序的时候会引起资源流失而是系统瘫痪!一般情况下,在退出之前你必须做一些工作,比如说恢复系统原来的分辨率等!
      

  32.   

    Terminate处理完应用程序的消息循环中的所有消息才结束应用程序,
    Halt是直接结束应用程序,两者是有些不同的。
      

  33.   

    唉!大家讨论了这么久都还是没有个结论……可见Borland文档方面的工作还很不足啊!