Getchar non bloquant !!!

MasterNKZ Messages postés 38 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 26 août 2004 - 2 févr. 2003 à 14:51
FlorimondH Messages postés 11 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 mars 2010 - 19 févr. 2010 à 00:54
Salut tout le monde,

Je programme en C sous linux, et je voudrai savoir si il existe une astuce pour rendre le getchar non bloquant, ou existe t-il une fonction similaire a getchar mais non bloquant.
j'ai une boucle de ce genre:

do{
c=getchar();
/*
series d'actions
*/
while(c!='q');

le probleme c ke arrivé à la ligne du getchar le prog s'y arrete et attend ke j'appuie sur une touche et moi je voudrai que si je tape rien il continue, parce ke dans cet exemple c comme si je faisais tourner le prog moi meme en appuyant sur une touche (differente de 'q' bien sur), c comme si ct du pas a pas, donc si vous pouviez m'aider.

Niko

7 réponses

trinitacs Messages postés 249 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 7 août 2003 2
2 févr. 2003 à 15:02
-------------------------------
Réponse au message :
En fait tu veux savoir si la touche q a été pressé. Le gethar peut être non bloquant si le buffer est déjà plein. Mais ce n'est pas une solution car j'ai l'impression que tu désire détecter si la touche q a été pressée.

Pour cela utilise une bibliothèque ou les interuption du bios.
En tout cas je ne connais pas de fonction ANSI/ISO du C/C++ qui te signale qu'elle a été la touche pressé.

Sinon tu peux chercher dans le fichier équivalant à conio qui fourni getch();

-------------------------------

> Salut tout le monde,
>
> Je programme en C sous linux, et je voudrai savoir si il existe une astuce pour rendre le getchar non bloquant, ou existe t-il une fonction similaire a getchar mais non bloquant.
> j'ai une boucle de ce genre:
>
> do{
> c=getchar();
> /*
> series d'actions
> */
> while(c!='q');
>
> le probleme c ke arrivé à la ligne du getchar le prog s'y arrete et attend ke j'appuie sur une touche et moi je voudrai que si je tape rien il continue, parce ke dans cet exemple c comme si je faisais tourner le prog moi meme en appuyant sur une touche (differente de 'q' bien sur), c comme si ct du pas a pas, donc si vous pouviez m'aider.
>
> Niko
0
cmarsc Messages postés 455 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 18 décembre 2003
2 févr. 2003 à 17:29
salut,

getch(); voir dans <ncurses.h>
si c'est une fonction comme kbhit il faudrait l'écrire
0
MasterNKZ Messages postés 38 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 26 août 2004
2 févr. 2003 à 20:45
j'ai deja teste tout ce ki pouvait ressembler a getchar de pres ou de loin dans <ncurses.h> et rien de convaincant.
cmarsc, je n'ai pas compris ta deuxieme phrase, je ne sais pas ce ke c ke kbhit...

Niko
0
cmarsc Messages postés 455 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 18 décembre 2003
3 févr. 2003 à 13:24
kbhit() <conio.h> (sous dos borland bien souvent) est une fonction qui detecte si une touche a été frappée, elle fait une boucle sans fin et s'arrecte une fois que l'on presse n'importe quelle touche, malheuresement est n'existe pas sous linux. il faut l'écrire nous même :-(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cmarsc Messages postés 455 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 18 décembre 2003
3 févr. 2003 à 13:29
getch est dans <curses.h> et non <ncurses.h>
0
MasterNKZ Messages postés 38 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 26 août 2004
3 févr. 2003 à 23:07
c bon g trouvé une astuce en mtapant les man en anglais, je met juste halfdelay(1) et j'utilise wgetch
halfdelay permet de parametrer le tps d'attente en dixieme de seconde pour wgetch(et autres cousins de wgetch).
Niko
0
FlorimondH Messages postés 11 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 mars 2010
19 févr. 2010 à 00:54
[Déterrage]
Merci t'as solution m'a aidé. Cependant, 'haldelay(1)', au lieu de rendre getch totalement non bloquant, introduit un dixième de seconde de temporisation alors que l'on pourrait utiliser simplement 'nodelay'

exemple:
/* curses.h définit TRUE 1 et FALSE 0 */
nodelay (stdscr, TRUE);

-> http://linux.die.net/man/3/halfdelay

a+ collègue manchot ;)
0
Rejoignez-nous