【发布时间】:2015-11-27 00:36:36
【问题描述】:
这是我第一次使用 Windows 应用程序,我有点沮丧。我只有一个创建 Win32(Visual C++)GUI 应用程序的简单代码,但是一旦我启动可执行文件,我的 CPU 就会上升到 30%(超过应用程序),在我寻找解决这个问题的过程中,我发现有人说在消息循环(GetMessage 或 PeekMessage)中休眠 10 毫秒可以解决这个问题,而且确实如此。但由于我真的不喜欢突然让我的代码休眠,而且事实上这是一个事件处理程序循环,我希望能解释一下如何解决这个问题。
“麻烦区域”一瞥。
while (TRUE) {
if (PeekMessage(&g_Msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&g_Msg); // translate keystroke messages into the right format
DispatchMessage(&g_Msg); //Send the message to the WindowProc function
if (g_Msg.message == WM_QUIT)
break;
} else {
// Run d3d code here
}
// Sleep(1); REDUCES CPU!
}
提前致谢
Caio Guedes
【问题讨论】:
-
使用
PeekMessage不会等待某些东西,因此在循环中这样做将确保CPU一直处于忙碌状态... -
您期待什么?您的代码尽可能快地运行。显然,这会烧毁CPU。如果你想让它运行得更慢,那么就这样做。减慢代码的典型解决方案是让它进入睡眠状态。很难理解,为什么您甚至会关心持续呈现内容的应用程序中的 CPU 消耗。
-
我理解 Mats,但 CPU 使用率是不是有点太高了?如果我检查其他应用程序,例如... VLC,我可以看到它们往往不会出现这种“问题”。
-
这应该是一个视频播放器,我希望在视频解码开始时开始大处理部分:)
标签: c++ windows winapi visual-c++