基本上就是标题所说的。我想当用户按下特定按钮时每 1 秒更新一次按钮包含的文本。我注意到,当程序没有焦点时,它可以正常工作并且文本刷新正确,但是当我将鼠标悬停在程序上或尝试单击它的菜单时,Windows 通知我该程序没有响应,并询问我是否我希望它终止。当循环结束时,程序返回到正常状态。还有我可能做过的任何操作(比如移动它或关闭它)Sleep()-ing 在循环之后执行。这是一些代码:
case ID_BUTTON_START:
// Code executed when pressing Start Button.
char startButtonText[30]; // Storing next loop text
for (int i=5; i>0; i--)
{
sprintf(startButtonText, "Starting in ... %d", i);
SendMessage(hwndButtonStart, WM_SETTEXT, 0, (LPARAM)(startButtonText));
Sleep(1000);
}
这是正常的吗?如果不是的话是什么原因造成的?
The WndProc
不在应用程序内异步处理消息,这意味着所有消息都应快速处理并立即传递返回值。你不能Sleep
在 UI 线程中,因为它会阻止其他 UI 事件的处理。任何可能需要很长时间的繁重工作或同步请求/作业都应该在工作线程中执行。至少有三个可行的选择:
- 创建一个新的 (工作线程) 来完成任务。
- 如果该任务可能经常完成,请使用线程池反而。
- 设置并订阅定时器事件.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)