我真的很可笑。我在做C++编程的时候,需要等很久。所以我决定使用 while(){...}
。
模式 1: 如果我使用 while (1) {...}
,
CPU 将承受最大负载。 (它在一个 CPU 上占用最大负载。)
模式二:
while(GetMessage(&msg, NULL, 0, 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
会减轻CPU的负担。
但是while(1){...}
和while(GetMessage(&msg, NULL, 0, 0)){...
。
例如,
模式一
dwEndTime = time(NULL) + 120;
while(1)
{
if(IsOutOfTime())
break;
}
和
模式 2
dwEndTime = time(NULL) + 120;
while(GetMessage(&msg, NULL, 0, 0)
{
if(IsOutOfTime())
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
IsOutOfTime()
的实现:
BOOL IsOutOfTime()
{
if(time(NULL) >= dwEndTime)
return TRUE;
return FALSE;
}
导致不同的执行结果。 break
在模式 2 下不工作。
有人请帮我解决这个问题。
如果我在 while (1) {...}
中提供 Sleep(...)
,我可以减少 CPU 负载,但我讨厌像这样的编码风格这个。
1.模式 1 和模式 2 之间有什么本质区别。
2.我是否误用了模式 2?
3. 如何在不使用 sleep
的情况下降低 CPU 负载。
最佳答案
如果可能,应避免使用模式 1 和模式 2,因为两者都会轮询检查您是否超时。
模式 1 占用 100% cpu,不会处理任何 Windows 消息。
模式 2 仅在收到消息时检查超时,因此它可能会错过一段时间的超时。
相反,您应该考虑使用 timer当你超时时会触发。 GetMessage
将在计时器到期时返回一条 WM_TIMER
消息。 (我假设 IsOutOfTime
只是检查是否已经过了一段时间)。
关于C++ 函数在 while(GetMessage(...)){...} 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51039338/