【问题标题】:Messagebox delay in DelphiDelphi中的消息框延迟
【发布时间】:2012-09-02 17:05:49
【问题描述】:

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

有人也有过这种经历吗?

感谢您的帮助。

【问题讨论】:

    标签: winapi delphi-7 messagebox delphi


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 它没有在 GUI 线程中运行。就像我说的,当我删除消息框时它工作正常。我用的是indy,忙的代码都是在OnExecute过程中执行的。
    • 您的 GUI 线程中没有运行什么?显然然后按钮是。如果没有立即处理按钮单击,则必须在那里运行其他东西,从而阻止您的消息队列及时得到服务。
    • 就像我说的。如果我完全错过了消息框,它工作得很好。
    • 在什么意义上?您的问题是消息框延迟。如果您完全删除消息框,那又如何。问问自己,除了我描述的内容之外,消息框的显示可能会出现延迟吗?如果你不同意我的分析,至少提供技术细节。就像在哪个线程中运行一样。
    猜你喜欢
    • 2011-05-25
    • 2018-10-11
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多