riporto alla luce il topic perchè ho ricominciato a smasteriare

mi serve creare una funzione che legga in maniera ASINCRONA l'input da tasiera e inserisca il codice del tasto premuto in una coda, se e solo se il tasto da accodare è differente dal tasto accodato precedentemente. questo dovrebbe anche risolvere il problema di non riempire la coda quando tengo il tasto premuto. ho provato con l'api GetAsyncKeyState () ma comunque non riesco a risolvere tale problema
questo il codice
Spoilerbool dirListener :: listen ()
{
if ( (GetAsyncKeyState (VK_LEFT) & 0x8000) && ( dirQueue.empty ()|| (dirQueue.back () != LEFT) ) )
{
dirQueue.push(LEFT);
return true;
}
else if ( (GetAsyncKeyState (VK_UP) & 0x8000) && ( dirQueue.empty ()|| (dirQueue.back () != UP) ) )
{
dirQueue.push(UP);
return true;
}
else if ( (GetAsyncKeyState (VK_RIGHT) & 0x8000) && ( dirQueue.empty ()|| (dirQueue.back () != RIGHT) ) )
{
dirQueue.push(RIGHT);
return true;
}
else if ( (GetAsyncKeyState (VK_DOWN) & 0x8000) && ( dirQueue.empty ()|| (dirQueue.back () != DOWN) ) )
{
dirQueue.push(DOWN);
return true;
}
else
{
return false;
}
}
dove LEFT, UP, RIGHT, DOWN sono valori di un tipo enum.
potrei farlo anche accodando qualsiasi tasto e poi lasciando "filtrare" i tasti interessanti all'oggetto "client". spero abbiate capito cosa intendo
