我在该单元的Finalization中有如下代码:
if Thread.Suspended then
Thread.Resume;
Thread.Terminate;
这样的结果是内存泄漏.
2.在Create时,FreeOnterminated := False; 此时我再定义一个单元内的变量GFinished: Boolean;用以标识线程是否结束.\
在线程的OnTernimate方法中改写该变量 为True;
我在该单元的Finalization中有如下代码:
if Thread.Suspended then
Thread.Resume;
Thread.Terminate;
while not GFinished do Application.ProcessMessages;
....
线程结束时会存在问题.特别是当线程间隔比较大时,比如Sleep(5分钟);导致程序一直等待.
就最常规的退出方法是什么?谢谢.
可能我的方法都不正确.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
第二个问题:
while not Terninated do
begin
//其它处理
WaitForSingleObject(Handle, 5分钟); //或Sleep(5分钟);
end;
主程序退出时,这个线程会被通知结束吗?也就是Terniamted会被自动置为True吗?如果不能,那怎么办,要用Event通知吗?
一个最简单的改造办法是多次等待,同时减少等待时间,等待时同时判断Terminated
Sleep(5分钟);
改成
for i := 1 to 5*60 do
if not Termiated then
Sleep(1000);
else
Exit;Author:
sunnyfairy Time: 2011-1-5 13:22