我在 计算器 里注入了一个dll,在dll里创建了一个线程,什么都不做,只是循环常驻var
  test: tstringlist;
begin
  test := tstringlist.create;
  // 线程开始
  while true do
  begin
    sleep(100);
  end;
  // 线程结束
  test.free;
end;我想在 计算器 退出时释放这个线程
在dll的DLL_PROCESS_DETACH中做处理,但是经过调试发现计算器退出后所有线程都立即结束了,不会执行后面的test.free
这样就造成了内存泄漏不知道有人碰到过这个问题没,怎么解决?

解决方案 »

  1.   

    忘记说上面while循环里是有判断退出标志的,但是目标程序一退出,线程会立即中断执行,后面的释放语句根本无法执行到
      

  2.   

    定义Destroy事件,把test: tstringlist声明为全局变量,然后在Destroy事件中去释放
      

  3.   

    type
        TMyThread   =   class(TThread)
        private
            test: TStringList;
            {   Private   declarations   }
        protected
            procedure   Execute;   override;
        public
            destructor   Destroy;   override;
        end;implementation{   TOneThread   }destructor   TMyThread.Destroy;
    begin
        if assigned(test) then
           freeandNil(test);
        inherited;
    end;