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