请教一个多线程退出的问题.
看了很多相关的书,在网上没有找到合适的答案, 这个论坛也没有合适的版块问题这类问题,只有发这里了.
这里的版主都是我葱白的偶像.望解答.
关于多线程终止的问题.
在多线程Execute中,一般我这样写:
while not Terninated do
begin
//其它处理
WaitForSingleObject(Handle, 1); //或Sleep(1);效果一样.
end;
这个线程从程序初始化完成之后一直运行着,直到程序退出时终止.
如果我
1. 在Create中已经FreeOnTerminated := True;此时线程终止时应该自动释放内存空间.
我在该单元的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通知吗?
[ 本帖最后由 sunnyfairy 于 2011-1-3 12:06 编辑 ]
|