当我在C ++中按下'c'键时,我正在执行GetAsyncKeyState事件处理程序。
这是我的代码:
bool isKeyPressed = false;
void someFuntionOne()
{
if( GetAsyncKeyState( 'C' ) & 0x8000)
{
if(isKeyPressed)
{
isKeyPressed = false;
}
else
{
isKeyPressed = true;
}
}
}
void someFunctionTwo()
{
if(isKeyPressed)
{
// Do something
}
}
所以低音我想知道'C'是否被按下没有按下,所以我使用我的布尔变量isKeyPressed来告诉我键是否在任何点被按下。如果按下,则将isKeyPressed设置为true,如果再次按下,则将isKeyPressed设置为false。
我遇到的问题是我正在运行一个庞大的OpenGL / C ++程序,需要花费大量时间在一次迭代中执行整个程序,所以如果用户按下'C'键,程序可能无法及时捕获该事件,因为它仍在执行其他代码的其余部分,并且当前不在代码的部分,它检查GetAsyncKeyState('C')& 8000。
有没有更好的方法可以检查此事件,程序始终在任何执行时间点监听事件?我该如何实现呢?
答案 0 :(得分:0)
通常,将事件传递给您的应用程序的人将对它们进行排队,直到应用程序有机会处理它们,即在每个主循环迭代结束时。理想情况下,您会对该阶段的事件作出反应。 (丑陋的)替代方案就像:
bool keyWasPressed = false;
void processKeyEvent() {
if( <C is pressed>) {
keyWasPressed = true;
}
}
void someFunction() {
if(keyWasPressed) {
keyWayPressed = false;
// Do something
}
}