不会吧,Thread被Destroy时,FreeOnTerminate就应该被调用,
是否Memproof误报

解决方案 »

  1.   

    FreeOnTerminate 是一个变量.
    FreeOnTerminate := True; 
    我并不显示的调用Free;而是由TThread类隐式调用,
    但如果此线程正在执行,Free没有被调用.不知为何?
      

  2.   

    FreeOnTerminate的含义并不是主程序Terminate时Free, 而是在Thread Terminate时, 所创建的Thread Object自动Free.
    Thread.Terminate也并不是强制Thread结束, 只是把Thread.Terminated置为True而已.
    如果你的线程是个while true do类型的, 设了FreeOnTerminate := True应该没有什么用
    你可以在主程序结束时, 给线程发个信号, 等待线程的terminate后主程序再退出.
      

  3.   

    >>如果你的线程是个while true do类型的, 设了FreeOnTerminate := True应该没有什>>么用
    while true do 线程结束时,主程序不结束,FreeOnTerminate是有用的.
    请看VCL中TThread的代码
    destructor TThread.Destroy;
    begin
      if not FFinished and not Suspended then
      begin
        Terminate;  //设置变量
        WaitFor; // 等待宪成结束.
      end;
      if FHandle <> 0 then CloseHandle(FHandle);
      inherited Destroy;
      RemoveThread;
    end;也就是主程序退出, 会等待Thread结束.但好像不是这样.
    我用Memproof测试过Delphi自带的TThread的例子,在排序过程中关闭Form
    有内存泄漏,等排序结束在关闭则没有泄漏.
      

  4.   

    TThread.Destroy并不等于主程序退出, 会等待Thread结束.  只是说明Thread在Destroy时会做一些什么事而已.
    建议你还是等等看吧
      

  5.   

    tiger有些道理,你有LMD的控件吗?
    TLMDHiTimer会导致内存泄漏.(使用 Thread),
    不只tiger有何建议 :)
      

  6.   

    LMD和RX的控件我都不敢用,太不保险.DFS的保险.
      

  7.   

    呵呵, 对不起, 一般我不用第三方的控件. 而且LMD的源码是不是和dcu一样还有待考证
      

  8.   

    我是直接编译lmd的source, lmd是有许多错误
    ,我就改了一大堆,谢谢 tiger
      

  9.   

    to : agui
    问题是没有解决.
    我在提问.:)