2

I'm having problems with the messagebox API. I use messageboxw to ask a question to the user. For example my program is very busy with threads, etc. and when a user clicks on a button that shows the messagebox it doesn't show the messagebox until my program is less busy than before. When I remove the messagebox the code after it gets executed fine. I have too much code to show but maybe there is something that I have to take care of...

Anybody had this experience too?

Thanks for your help.

4

1 回答 1

10

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

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

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

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

于 2012-09-02T17:20:22.343 回答