winapi - Delphi 中的消息框延迟

标签 winapi delphi-7 messagebox delphi

我在使用消息框 API 时遇到问题。 我使用 messageboxw 向用户提问。 例如,我的程序非常忙于线程等,当用户单击显示消息框的按钮时,它不会显示消息框,直到我的程序比以前更忙。当我删除消息框时,它执行正常后的代码。我有太多代码要显示,但也许有些事情我必须处理......

有人有过这样的经历吗?

感谢您的帮助。

最佳答案

当您单击该按钮时,消息将发布到消息队列中。在您下次抽取消息队列之前,它不会得到处理。因此,如果您发现单击按钮与程序响应之间存在延迟,那是因为消息队列未及时得到服务。

如果您的 GUI 线程很忙,那么消息队列将不会被抽取,直到主线程完成它正在做的事情。如果你有长时间运行的任务,你的 GUI 线程会很忙。一旦排队的按钮点击消息最终得到处理,那么调用 MessageBoxW 将立即显示对话框。

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

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

关于winapi - Delphi 中的消息框延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12238015/

相关文章:

c# - 如何显示打印机属性/首选项对话框并保存更改?

winapi - 如何防止我生成的进程生成子进程?

c - 设置客户区大小(创建后)?

javascript - jquery 消息窗口/对话框

.net-2.0 - MessageBox 在最大化的 MDI 窗体中失去焦点

c# - 如何验证 C# 中的消息框弹出窗口?

c++ - 将字节数组转换为 UTF-8 unicode

delphi - StrToFloat 在我的应用程序中引发错误,而不是在任何应用程序中引发错误

Delphi:我自己的计时器的OnTimer事件从未发生

delphi - 如何增加分配给变量的串行数据的数量?