【发布时间】:2012-09-02 17:05:49
【问题描述】:
我在使用消息框 API 时遇到问题。 我使用 messageboxw 向用户提问。 例如,我的程序非常忙于线程等,当用户单击显示消息框的按钮时,它不会显示消息框,直到我的程序没有以前那么忙。当我删除消息框时,代码执行得很好。我有太多代码要显示,但也许我需要处理一些事情......
有人也有过这种经历吗?
感谢您的帮助。
【问题讨论】:
标签: winapi delphi-7 messagebox delphi
我在使用消息框 API 时遇到问题。 我使用 messageboxw 向用户提问。 例如,我的程序非常忙于线程等,当用户单击显示消息框的按钮时,它不会显示消息框,直到我的程序没有以前那么忙。当我删除消息框时,代码执行得很好。我有太多代码要显示,但也许我需要处理一些事情......
有人也有过这种经历吗?
感谢您的帮助。
【问题讨论】:
标签: winapi delphi-7 messagebox delphi
当您单击该按钮时,会发生消息被发布到消息队列中。在您下次抽出消息队列之前,它不会得到处理。因此,如果您看到单击按钮和程序响应之间存在延迟,那是因为消息队列没有及时得到服务。
如果你的 GUI 线程很忙,那么在主线程完成它正在做的任何事情之前,消息队列都不会被抽取。如果你有长时间运行的任务,你的 GUI 线程会很忙。一旦排队的按钮点击消息最终得到处理,那么对 MessageBoxW 的调用将导致对话框立即显示。
GUI 线程无法运行的唯一其他原因是 CPU 被更高优先级的线程占用。但这不太可能。应用程序使用高优先级线程是非常不寻常的。如果你这样做,我会感到惊讶。
如何解决问题?如果您的主线程上有长时间运行的任务,请将这些任务移至后台线程。或者,如果您有阻止 GUI 线程运行的高优先级线程,则以正常优先级运行您的后台线程。
【讨论】: