net*_*boy 7 delphi multithreading
我确定它与GetMessage调用有关,好像我用'while(not terminated)do;'替换它,应用程序会平静地关闭.是因为GetMessage冻结线程吗?您能否提供有关问题本身的更多信息,并最终提供解决方案.谢谢!
type TListener = class(TThread)
procedure Execute; override;
destructor Destroy; override;
end;
var l: TListener;
msg:TMsg;
procedure TListener.Execute;
begin
while(not Terminated) do
while(GetMessage(msg, Cardinal(-1), 0, 0)) do;
end;
destructor TListener.Destroy;
begin
inherited; // <-- freeze here!
end;
begin
l:= TListener.Create();
sleep(1000);
l.Free;
end.
Run Code Online (Sandbox Code Playgroud)
考虑内循环的终止条件.GetMessage阻止消息到达,它只False在处理wm_Quit消息时返回.
调用Free你的线程TThread正在等待另一个线程终止 - TThread.Destroy调用WaitFor.但是你的线程永远不会终止,因为它显然从未收到过wm_Quit消息.
由于您已经在使用消息,因此请不要打扰Terminated.这只会检查是否有人调用Terminate了你的线程对象,但由于这样做并不是通知线程它应该停止运行的方法,所以检查它是没有意义的.(如果Terminate方法是虚拟的,你可以覆盖它并让它wm_Quit向线程发布一条消息,但它不是,所以你不能.)