是否有像Sleep()这样的Windows API函数可以像MessageBoxA()一样工作?

问题描述 投票:0回答:1

当我在函数中使用

MessageBoxA()
时,它会暂停该函数,但主程序仍在运行。当我尝试使用
Sleep()
时,它会暂停整个程序,而不仅仅是其所在的函数。为什么会发生这种情况?

是否有一个Windows API函数,其工作方式类似于

Sleep()
,但工作方式类似于
MessageBoxA()
,仅暂停其所在的函数,而不是整个程序而不显示对话框?

我尝试使用

Sleep()
,但想找到另一个像
MessageBoxA()
一样工作的函数。我也尝试过
WaitMessage()
但是效果不太好。

c++ function winapi pause
1个回答
0
投票

MessageBoxA()
在内部运行自己的消息循环。这就是为什么即使调用线程被阻塞,您的 UI 仍然响应。

没有类似

Sleep
的 API 函数运行消息循环。您必须自己实施。例如,在您预期的睡眠间隔期间循环调用
MsgWaitForMultipleObjects()
。如果它检测到待处理的 UI 消息,您可以使用
(Peek|Get)Message()
检索消息并将其
DispatchMessage()
发送到 UI 进行处理,然后返回等待。

但是,更好的解决方案是从一开始就不阻塞 UI 线程。将长时间运行的阻塞操作移至单独的工作线程,并让它根据需要通知您的 UI 线程更新。

© www.soinside.com 2019 - 2024. All rights reserved.