Ca c'est pas une bonne idee car la boucle va bloquer sur le getchar en attendant qu'une touche soit pressee.
Il y a possibilite d'utiliser la lib ncurses en specifiant un half-delay mais c'est un peu limite car il faut specifier un timeout en dixiemes de secondes, bref l'appel bloquera pendant au minimum 1 dixieme a chaque fois et dans une boucle c'est un ralentissement enorme, sinon il y a nodelay qui retourne tout de suite.
Une methode plus propre serait :
2 threads, un qui surveille le clavier pendant que l'autre fait le loop. Lorsque le thread qui surveille le clavier detecte un keypress, il signale l'autre thread(soit en envoyant un signal, soit en mettant une variable commune a une certaine valeur, variable qui est testee a plusieurs endroits dans le soft) qui des lors fait ce qu'il faut(cleanup & sortie).
De cette maniere le thread de calcul ne fait que ca, du calcul et n'a pas a se soucier d'entrees/sorties, et l'autre thread ne fait que gerer les entrees/sorties, je trouves cela plus "clean" comme methode. Si tu veux changer la methode pour stopper le soft(passer d'un key press a un packet recu sur un socket ou autre par exemple), t'as qu'a changer le code du thread de surveillance, pas besoin de toucher le code de calcul.
[^] # Re: pistes...
Posté par pasBill pasGates . En réponse au message Quitter le programme en appuyant sur une touche. Évalué à 5.
Il y a possibilite d'utiliser la lib ncurses en specifiant un half-delay mais c'est un peu limite car il faut specifier un timeout en dixiemes de secondes, bref l'appel bloquera pendant au minimum 1 dixieme a chaque fois et dans une boucle c'est un ralentissement enorme, sinon il y a nodelay qui retourne tout de suite.
Une methode plus propre serait :
2 threads, un qui surveille le clavier pendant que l'autre fait le loop. Lorsque le thread qui surveille le clavier detecte un keypress, il signale l'autre thread(soit en envoyant un signal, soit en mettant une variable commune a une certaine valeur, variable qui est testee a plusieurs endroits dans le soft) qui des lors fait ce qu'il faut(cleanup & sortie).
De cette maniere le thread de calcul ne fait que ca, du calcul et n'a pas a se soucier d'entrees/sorties, et l'autre thread ne fait que gerer les entrees/sorties, je trouves cela plus "clean" comme methode. Si tu veux changer la methode pour stopper le soft(passer d'un key press a un packet recu sur un socket ou autre par exemple), t'as qu'a changer le code du thread de surveillance, pas besoin de toucher le code de calcul.