Delphi中的Messagebox延迟

Ben*_*iss 2 delphi winapi messagebox delphi-7

我遇到了messagebox API的问题.我使用messageboxw向用户提问.例如,我的程序非常忙于线程等.当用户点击显示消息框的按钮时,它不显示消息框,直到我的程序比以前忙.当我删除消息框后,代码执行得很好.我有太多的代码要展示,但也许有一些东西我需要照顾...

有人也有这种经历吗?

谢谢你的帮助.

Dav*_*nan 10

单击按钮时发生的情况是消息发布到消息队列.在您下次填充消息队列之前,这不会得到处理.因此,如果您在单击按钮和程序响应之间看到延迟,那是因为消息队列未及时得到服务.

如果你的GUI线程忙,那么在主线程完成它正在做的任何事情之前,不会抽取消息队列.如果您在其上运行了很长时间的任务,那么您的GUI线程将会很忙.一旦排队按钮单击消息最终得到处理,则调用MessageBoxW将导致对话框立即显示.

GUI线程无法运行的唯一原因是CPU是由更高优先级的线程使用的.但这不太可能.应用程序使用高优先级线程非常不寻常.如果你这样做,我会感到惊讶.

如何解决问题?如果您在主线程上有长时间运行的任务,请将这些任务移到后台线程上.或者,如果您具有阻止GUI线程运行的高优先级线程,则以正常优先级运行后台线程.

  • 什么没有在你的GUI线程中运行?显然然后按钮是.如果没有立即处理按钮点击,那么必须在那里运行其他东西以阻止您的消息队列及时得到服务. (3认同)