Лучшая имплантация нажатой клавиши

В настоящее время я выполняю обработчик события 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
}
}

В общем, я хочу знать, была ли нажата клавиша «C», не удерживалась ли она, поэтому я использую мою логическую переменную isKeyPressed, чтобы сказать мне, была ли нажата клавиша в какой-то момент. Если он был нажат, установите для isKeyPressed значение true, а для повторного нажатия — для isKeyPressed значение false.

Проблема, с которой я столкнулся, заключается в том, что я запускаю огромную программу OpenGL / C ++, которой требуется много времени, чтобы обойти и выполнить всю программу за одну итерацию, поэтому, если пользователь нажимает клавишу «C», программа может не поймать это событие вовремя, потому что он все еще выполняет остальную часть другого кода и в настоящее время не находится в разделе кода, где он проверяет, является ли GetAsyncKeyState (‘C’) & 0x8000.

Есть ли лучший способ проверить это событие, когда программа всегда ожидает событие в любой момент времени выполнения? Как я могу это реализовать?

0

Решение

Обычно тот, кто доставляет события в ваше приложение, ставит их в очередь до тех пор, пока приложение не получит возможность обработать их, то есть в конце каждой итерации основного цикла. Так что в идеале вы бы отреагировали на события на этом этапе. (Уродливая) альтернатива что-то вроде:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]