gpt4 book ai didi

delphi - ProcessMessages 和应用程序的使用

转载 作者:行者123 更新时间:2023-12-03 03:00:37 26 4
gpt4 key购买 nike

我需要知道使用允许我使用整个应用程序的 ProcessMessages 是否合法。

伪代码:

主线程按钮调用 - 搜索。

procedure ButtonOnClick;
begin
var1 = ExecuteSearch();
end;

function ExecuteSearch:Something;
begin
thread.StartThread;
while thread.Finished do
Application.ProcessMessages;
result := something;
end;

当我使用这种结构时,我可以单击软件的其他部分并使用它。但我不知道这是如何运作的。如果安全的话。

最佳答案

虽然这可以保证安全,但你这是在玩火。您面临重新进入的风险。您必须确保用户无法再次按下该按钮。我相信您在搜索运行时已禁用它。在首次调用 ProcessMessages 之前,您必须确保它已禁用。

我的建议始终是避免使用ProcessMessages。更好的方法是启动线程并安排它在完成时通知主线程。当然,您仍然需要在线程运行时禁用该按钮。

但是,如果您确实必须使用ProcessMessages,请不要使用这样的繁忙循环。使用整个处理器来等待长时间运行的搜索操作完成没有多大意义。使用更智能的阻塞循环,如下所示:

while MsgWaitForMultipleObjects(1, Thread.Handle, False, 
INFINITE, QS_ALLEVENTS)=WAIT_OBJECT_0+1 do
Application.ProcessMessages;

MsgWaitForMultipleObjects 函数将阻塞,直到:

  1. 消息被放入队列中,或者
  2. 线程已发出信号。线程完成时会收到信号。

当线程收到信号时循环终止,但也会处理任何排队的消息。

关于delphi - ProcessMessages 和应用程序的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10334553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com