c++ - GetAsyncKeyState() 占用大量 CPU?我使用正确吗?

标签 c++ winapi loops

我在我的一个简单的乒乓球游戏中使用 GetAsyncKeyState() 来检查用户是否按下了箭头键。我在网上读到你需要以某种方式使用这个功能,但我发现它非常占用 CPU(占用了我 50% 的 CPU!)。这相当令人不安,然而,经过一番尝试后我发现如果我添加一个 sleep(1); 然后 CPU 使用率下降到 0% 而一切仍然正常。必须有更好的方法来使用此功能,或者至少有更好的方法来降低 CPU 使用率。

如有任何帮助,我们将不胜感激!

我的代码:

while(true)
{
    for(i = 8; i < 191; ++i)
    {
        if(GetAsyncKeyState(i) == -32767)
        {
            if(i == VK_LEFT)
                 // do stuff
            else if(i == VK_RIGHT)
                 // do stuff
            else if(i == VK_UP)
                 // do stuff
            else if(i == VK_DOWN)
                 // do stuff
        }
    }
    Sleep(1);
}

最佳答案

并不是说 GetAsyncKeyState 占用大量 CPU;就是你一直在尽可能快地调用它。当你在无限循环中运行时,这相当于说 i++ 是 CPU 密集型的。

您应该使用 GetMessage 等待直到您实际输入,或者如果这还不够好(因为您可能还想更新一些动画而不等待消息),那么您应该选择一些轮询间隔并使用类似 MsgWaitForMultipleObjects 的东西(或使用 SetTimer 创建频繁重复的计时器消息)。

关于c++ - GetAsyncKeyState() 占用大量 CPU?我使用正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10678583/

相关文章:

c++ - MFC:如何在旧版 MFC ver 6 中保存工具栏的位置?

c++ - 当 ReferencedDomainName 为 NULL 时出现 LookupAccountName 错误

loops - 如何使用ListView.builder和for flutter进行循环

c++ - 在 C++ 中逐行读取字符串然后读取 int

c++ - 成员访问和模板特化

C++调用父类(super class)

windows - 如何将消息路由到控件的标准 WNDPROC

对这个 while 语句感到困惑

python - 如何生成许多列表并为其赋值

c++ - 缓动函数的持续时间是多少