Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2764 connectés 

 


Dernière réponse
Sujet : [C]une commande pour linux qui serait equivalente a kbhit ??
slvn ca l air pas mal le ncurses.h, je viens de tomber sur un site sympa qui donne une bonne approche globale  
( http://perso.club-internet.fr/arif [...] es03.html)
 
mais, est ce que je suis obligé de cree un objet "windows" dnas le terminal pour pouvoir faire une saisie de caractere "non blocquant" ??
 
et pour ma boucle, pour arranger le pb, la meilleurs solution est de faire un thread ??

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
slvn ca l air pas mal le ncurses.h, je viens de tomber sur un site sympa qui donne une bonne approche globale  
( http://perso.club-internet.fr/arif [...] es03.html)
 
mais, est ce que je suis obligé de cree un objet "windows" dnas le terminal pour pouvoir faire une saisie de caractere "non blocquant" ??
 
et pour ma boucle, pour arranger le pb, la meilleurs solution est de faire un thread ??
Jar Jar Si tu veux une gestion de l'entrée plus fine que ça, je pense qu'il faut vraiment utiliser ncurses. On peut désactiver l'écho local, et avoir les caractères instantanément. Entre les deux, tu as readline, mais ses fonctionnalités sont restreintes à certains trucs.
 
En plus, ta boucle est buggée : elle va bouffer 100 % de cpu.
slvn j ai pas du croiser les doigt assez fort, car le prog a du mal a faire ce que je desire :
 
#include<fcntl.h>
 
int main(void)
{
  char c = -1 ;
   
fcntl(0,T_SETFL,0_NONBLOCK); // ca doit mettre le descripteur de stdin en mode nonblockant ??
  while(1)
  {
    c = getchar() ;
    if(c != -1 )
    {
      c++ ;
      printf( "... %c" , c );
      c = -1 ;
    }
  }
}
 
j aimerais que quand j appuis sur A, il m affiche B ( snas que j ai a appuyer sur entrer)
 
mais en pratique : ca m affiche A (apres la pression de la touche A), puis quant j appuis ensuite sur entrer, ca m affiche B

 

[jfdsdjhfuetppo]--Message édité par slvn--[/jfdsdjhfuetppo]

slvn mmm
pour l instant, tout a l air de bien marchr :) (je croise les doigts:) )
le -lpthread, je suis con j aurais du y penser, c est les meme option que dev c++ :)
 
le descripteur de stdin non blockant, ca l air aussi de bien marcher (mis a a part que gcc ne connait pas STDIN_FILENO == 0 ?! enfin c pas grave ca)
 
en ce qui concerne conio.h, ca ne marche que sous windows je crois
veryfree tu a essayé" avec getch(e)() de la librairie conio.h ?
le "e" entre guillement permet d avoir en valeure de retour le caractere frappé je crois
en gros
 
char a;
a=getche();//essaye sans le e si ca marche pas
R@NNIS cc -Wall toto.c -lpthread -o kbdtest
slvn bon, je suis en train de tester les thread et aussi la fonctio fncl.
 
mais la j ai un pb, qu a pas grand chose a voir avec les threads, mais plutot avec l utilisation d un lib :
 quand je veux utiliser des threads, (avec pthread.h)
je compile avec gcc -> undefined reference to "pthread_create"  
 
je dois surment linker la lib, mais je sias pas quel ligne rajouter a mon makefile ou bien quelle paramettre pour gcc :??:
Jar Jar ???
man fcntl est très clair, pourtant. Et ce n'est pas du GNU, car c'est un appel système linux.
 
Sinon, pour les threads ce sera effectivement de la doc GNU, et elle est bigrement bien foutue. Je te conseille de prendre la version postscript (dans debian c'est le paquet glibc-doc), et/ou de jeter un coup d'oeil du côté de man pthread_create.
 
Au passage, j'utilise les deux (lecture non bloquante avec ncurses et threads Posix), c'est encore la meilleure solution.
slvn je viens de jeter un coup d oeil a la fonction :d et je crois qeu je vais plutot me pencher sur les thread:d
(je sais pas pkoi, mais la doc Gnu a tedance a rebuter un peu:) )
slvn j ai un doute, mais les thread, c est du C ou C++ ?? (je ne peux utiliser que du C ...)
 
je vais me renseinger, sur fnctl(), ca me parait etre ce dont j ai besoin
Jar Jar Il y a plein de moyens.
Déjà, tu peux passer stdin en mode non-bloquant, avec un truc du genre fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); comme ça, les appels à getchar renvoient EAGAIN s'il n'y a pas de données.
 
Sinon, tu peux utiliser ncurses, et là il y a plein de moyens. Cf. man ncurses et man halfdelay.
antsite Salut, alors je connais pas Linux mais il y a un équivalent un peu plus bourin mais qui marche :
au lieu de while(!kbhit()) tu fais un thread :
main()
{
  stop = 0;
  lancer_lethread() (je connais pas la fonction linux)
  getch();
}
 
void monthread(void*)
{
  while(stop==0)
  {
    ton prog....
  }
}
 
et voila !
slvn mmmmm c vrai:)
 
kbhit, ca permet, de savoir si une touche a été pressée, et si oui de reccuperer le nom de la touche pressée.
 
mais si aucune touche n a été pressée, ca ne fait pas "attendre" le prog, comme le ferait getchar()
Jar Jar Si tu nous disais ce que ça fait, on pourrait peut-être t'aider.
slvn y a t il un equivalent de kbhit qui marcherait sous linux ??

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)