Application.Run过程调用一个处理Windows消息的无限循环:
repeat
try
HandleMessage;
except
HandleException(Self);
end;
until Terminated;
只能通过
Terminated
过程将Application.Terminate
属性设置为true,该过程发送PostQuitMesage。我想更改消息处理循环,以便可以使用全局变量直接停止它(不使用消息队列):
var MyTerminated:Boolean
....
repeat
try
HandleMessage;
except
HandleException(Self);
end;
until Terminated or MyTerminated;
问题是,是否有可能使程序使用您自己的Application.Run版本?
最佳答案
“终止”属性是只读的。但是,它是FTerminated
字段的直接获取器,因此Application.Terminated
直接从布尔字段读取。虽然该语言不允许设置Application.Terminated
,但是您可以使用指针在该地址设置布尔值:
PBoolean(@Application.Terminated)^ := True;
您也可以考虑使用
Halt
,它可以使消息循环完全通过,从而获得更突然但更不容易破解的解决方案。