2014-03-04 50 views
0

我正在執行一個GetAsyncKeyState事件處理程序,當在C++中按下'c'鍵時。更好地植入按鍵

這裏是我的代碼:

 bool isKeyPressed = false; 
void someFuntionOne() 
{ 

    if(GetAsyncKeyState('C') & 0x8000) 
    { 

     if(isKeyPressed) 
     { 
      isKeyPressed = false; 
     } 
     else 
     { 
      isKeyPressed = true; 
     }  
    } 
} 

void someFunctionTwo() 
{ 
    if(isKeyPressed) 
    { 
    // Do something  
    } 
} 

所以bassically我想知道如果「C」已經被按下不舉辦下來,我用我的布爾變量isKeyPressed告訴我,如果鍵在按下任何一點。如果它被按下,則將isKeyPressed設置爲true,如果再次按下,則將isKeyPressed設置爲false。

我遇到的問題是我正在運行一個巨大的OpenGL/C++程序,需要花費大量時間才能在單次迭代中執行整個程序,因此如果用戶按下'C'鍵,程序可能無法及時捕獲該事件,因爲它仍在執行其他代碼的其餘部分,並且當前不在代碼的檢查GetAsyncKeyState('C')& 0x8000的代碼段。

有沒有更好的方法可以檢查這個事件,程序總​​是監聽事件發生在任何執行時間點?我怎樣才能實現這個?

+1

您可以刪除整個的if/else塊並將其替換爲:isKeyPressed = isKeyPressed – CoryKramer

+0

偉大的小費感謝! – Morelka

回答

0

通常,將事件傳遞給應用程序的人會將它們排隊,直到應用程序有機會處理它們,即在每個主循環迭代結束時。所以理想情況下,你會在那個階段對事件做出反應。一個(醜陋的),另一種方法是這樣的:

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