Non bloquant dans c? (les fenêtres)

J’essaie d’obtenir une E / S non bloquante sur une application de terminal Windows (Windows uniquement, désolé!).

Que se passe-t-il si je souhaite avoir un bref délai de saisie dans lequel l’utilisateur peut appuyer sur un bouton, mais s’il ne le fait pas, la saisie s’arrête et le programme continue?

Par exemple:

Une timer qui compte de 1 à ce qui s’arrête lorsque l’utilisateur appuie sur une certaine touche: je devrais avoir une boucle while, mais si je fais un getch ou une fonction getchar, le programme sera arrêté, non?

Je sais que je pourrais utiliser kbhit (); , mais pour le “programme”, j’essaie de faire en sorte que je dois connaître l’entrée, pas seulement SI IL Y A UNE entrée! Existe-t-il des fonctions simples qui me permettraient de lire comme la dernière touche de la mémoire tampon du clavier?

De la documentation pour _kbhit() :

La fonction _kbhit recherche sur la console une frappe récente. Si la fonction renvoie une valeur différente de zéro, une frappe est en attente dans la mémoire tampon. Le programme peut ensuite appeler _getch ou _getche pour obtenir la frappe.

Alors, dans ta boucle:

 while (true) { // ... if (_kbhit()) { char c = _getch(); // act on character c in whatever way you want } } 

Donc, vous pouvez toujours utiliser _getch() , mais limitez son utilisation à après que _kbhit() indique qu’il y a quelque chose en attente. De cette façon, il ne bloquera pas.