更好地植入按键

时间:2014-03-04 14:38:19

标签: c++ events opengl onkeypress

当我在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。

有没有更好的方法可以检查此事件,程序始终在任何执行时间点监听事件?我该如何实现呢?

1 个答案:

答案 0 :(得分:0)

通常,将事件传递给您的应用程序的人将对它们进行排队,直到应用程序有机会处理它们,即在每个主循环迭代结束时。理想情况下,您会对该阶段的事件作出反应。 (丑陋的)替代方案就像:

bool keyWasPressed = false;
void processKeyEvent() {
     if( <C is pressed>) {
         keyWasPressed = true;
     }
}
void someFunction() {
    if(keyWasPressed) {
        keyWayPressed = false;
        // Do something     
    }
}