更好地植入按下的按键 我现在在C++中按下“C”键时执行GATASYNCKEYSTATE事件处理程序。
这是我的密码:更好地植入按下的按键 我现在在C++中按下“C”键时执行GATASYNCKEYSTATE事件处理程序。,c++,events,opengl,onkeypress,C++,Events,Opengl,Onkeypress,这是我的密码: bool isKeyPressed = false; void someFuntionOne() { if( GetAsyncKeyState( 'C' ) & 0x8000) { if(isKeyPressed) { isKeyPressed = false; } else { isKeyPressed = true;
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')&0x8000是否为的代码部分
有没有更好的方法可以检查这个事件,程序总是在任何执行时间点侦听事件的发生?如何实现这一点?通常,无论谁将事件交付给您的应用程序,都将对其进行排队,直到应用程序有机会处理它们为止,即在每个主循环迭代结束时。因此,理想情况下,你会对该阶段的事件做出反应。一个(丑陋的)替代方案是:
bool keyWasPressed = false;
void processKeyEvent() {
if( <C is pressed>) {
keyWasPressed = true;
}
}
void someFunction() {
if(keyWasPressed) {
keyWayPressed = false;
// Do something
}
}
bool键被按下=false;
void processKeyEvent(){
如果(){
按键waspressed=true;
}
}
void函数(){
如果(按键已按下){
keyWayPressed=false;
//做点什么
}
}
您可以删除整个if/else块,并将其替换为:isKeyPressed=!按键