W
wolaixue
Unregistered / Unconfirmed
GUEST, unregistred user!
DLL中创建了一个线程(TestThread := TTestThread.Create(False),线程执行代码如下:
type
TTestThread = class(TThread)
protected
procedure Execute;
override;
end;
var
TestThread: TTestThread;
implementation
procedure TTestThread.Execute;
begin
FreeOnTerminate := True;
while not Terminateddo
begin
//做些什么...
Sleep(0);
end;
end;
finalization
TestThread.Terminate;
TestThread.WaitFor;
end.
该DLL被主程序FreeLibrary或ExitProcess时(主程序LoadLibrary该DLL)会执行finalization
之后的代码,结果发现:FreeLibrary没问题,可在未调用FreeLibrary而直接ExitProcess时以上
代码就会出问题(FreeLibrary时TestThread还有机会执行,ExitProcess时却没有机会,因此
WaitFor就是死等了),甚至不执行以上两句代码也会出问题.
我想实现的是:在主程序没有机会调用FreeLibrary而直接ExitProcess的情况下,如何避免程序
出错!或者问如何在程序即将退出时结束TestThread线程!
type
TTestThread = class(TThread)
protected
procedure Execute;
override;
end;
var
TestThread: TTestThread;
implementation
procedure TTestThread.Execute;
begin
FreeOnTerminate := True;
while not Terminateddo
begin
//做些什么...
Sleep(0);
end;
end;
finalization
TestThread.Terminate;
TestThread.WaitFor;
end.
该DLL被主程序FreeLibrary或ExitProcess时(主程序LoadLibrary该DLL)会执行finalization
之后的代码,结果发现:FreeLibrary没问题,可在未调用FreeLibrary而直接ExitProcess时以上
代码就会出问题(FreeLibrary时TestThread还有机会执行,ExitProcess时却没有机会,因此
WaitFor就是死等了),甚至不执行以上两句代码也会出问题.
我想实现的是:在主程序没有机会调用FreeLibrary而直接ExitProcess的情况下,如何避免程序
出错!或者问如何在程序即将退出时结束TestThread线程!