gpt4 book ai didi

c++ - 捕捉按键 C++

转载 作者:搜寻专家 更新时间:2023-10-31 01:13:20 24 4
gpt4 key购买 nike

我正在使用一个简单的循环来捕捉用户按键;

while (1)
{
for(i = 8; i <= 190; i++)
{
if (GetAsyncKeyState(i) == -32767){
//Do stuff
}
}
}

当用户按下某个键时,它会“做一些事情”,但是很明显,因为它无限循环,而且我是 C++ 的新手,它占用了 100% 的 CPU,这对于简单的输入来说并不好。

我做错了什么?我试过 Sleep() 函数(如果我把它放在“for 循环”中,它会错过按键,如果我把它放在“while 循环”中,它根本不会降低 CPU,afaik)

我怎样才能让它捕捉到相同的按键,但使用的 CPU 却没有那么多;我错过了一个把戏吗?我敢肯定,大多数程序都能捕捉到按键,但您不会 100% 看到所有按键!

非常感谢。

最佳答案

将你的无限循环放在一个工作线程中,并让它在每次迭代时休眠一段合理的时间间隔。 C++11 使这变得非常简单:

#include <thread>
#include <chrono>

std::chrono::milliseconds THREAD_WAIT = 50;

int keypress = -1;

void GetKeyPress()
{
while (1)
{
for(i = 8; i <= 190; i++)
{
int k = GetAsyncKeyState(i);
if (/*whatever condition needs to be satisfied*/)
keypress = k;
}
if (keypress != -1) break; //Use this only if you have td.join() below
std::this_thread::sleep_for(THREAD_WAIT);
}
}

int main(void)
{
...

std::thread td( GetKeyPress );
td.join(); //If you want to block until the user presses a key, otherwise remove.

//If no join(), do the rest of your program, checking in on keypress when need be

return 0;
}

关于c++ - 捕捉按键 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com