Comment obtenir une entrée du clavier tout en faisant d’autres choses en même temps?

J’utilise C (gcc) et ncurses, pour créer un programme qui surveillera les données provenant du port série. Le programme a un long while , où il lit les données provenant du port et en même temps, il affiche ces informations à l’écran …

Mais le problème est là:

Comment peut-il lire les entrées de mon clavier (puisque getch() gèle le programme jusqu’à ce qu’il obtienne une entrée) et en même temps lire les informations provenant du port?

Peut-être que je dois utiliser une autre méthode (pas la plus grosse), alors les idées sont les bienvenues!

faire getch un appel non bloquant en utilisant l’option nodelay .

 nodelay(stdscr,TRUE); 

Plus d’informations peuvent être trouvées à http://www.gsp.com/cgi-bin/man.cgi?topic=nodelay

Selon votre environnement, vous avez peut-être la fonction kbhit (), elle pointe simplement dans la mémoire tampon du clavier et renvoie une valeur non nulle s’il y a une clé – vous pouvez alors utiliser getch ().

(conio.h)

Peut-être fork ()? Gardez simplement à l’esprit que l’enfant s’exécute dans un processus séparé afin que les variables ne puissent pas être directement partagées entre eux

  pid_t pID = fork ();
 if (pID == 0) {// enfant
    // Code exécuté uniquement par un processus enfant
    // getch () ...
 } else if (pID <0) {// échec de la fourchette
    // Exception de projection
    // ... 
 } else {// parent
    // Code exécuté uniquement par le processus parent
    // ...
 }

Essayez de select() ou poll() . Ils font tous les deux la même chose, mais avec des interfaces différentes. Vous lui donnez une liste de descripteurs de fichier, et il attendra qu’au moins un de ces descripteurs soit prêt, puis vous retournerez pour vous indiquer ceux qui peuvent être lus (ou écrits) sans blocage. Consultez les liens pour des exemples et plus de détails.

utilisez cbreak() pour désactiver la mise en mémoire tampon des lignes

 nodelay(win, TRUE); 

cela vous donnera une fonction getch() non bloquante.