多线程DLL如何安全退出?(200分)

  • 主题发起人 wolaixue
  • 开始时间
懒得看,简单说:
就是在每个线程里都用同一个全局线程变量来控制线程的终止。在进程结束时,控制这个
全局线程变量,关闭全部线程。API 中还有一个线程存储可以利用。
 
to 各位:
今天有时间好好测试了一回,最后发现问题出在Form1.Free上!
spidertong的有没有试过没有窗体的DLL?问的好!
DLL创建了线程后,ExitProcess时Form1.Free调用的DestroyWindow不成功,DELPHI
抛出一个异常,后续的代码会导致win9x出错(2000没事).只好用类似如下的形式了:
finalization
if Assigned(Form1) then
begin
try
Form1.Free;
except
end;
Form1 := nil;
end;
if Assigned(TestThread) then
begin
TerminateThread(TestThread.Handle);
CloseHandle(TestThread.Handle);
TestThread := nil;
end;

我对9x下的这种现象感到奇怪!
至于Sleep(0)或Delay过程来等待线程结束在我这个问题上并不适用,因为ExitProcess时
别的线程没有机会执行任何代码,等只能是死等(包括我原先用的WaitFor).
 
TO: wolaixue
98为什么会出现这种情况,在我2002-12-28的帖子已经有过分析,虽然不一定完全正确,但是是考虑的思路。
 
多人接受答案了。
 
顶部