Si nous prenons un compteur très simple en utilisant ncurses:entrée non-blocage dans gforth
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ncurses.h>
int main(void) {
struct timespec start;
clock_gettime(CLOCK_REALTIME, &start);
initscr();
cbreak();
nodelay(stdscr, TRUE);
{
int key = -1;
struct timespec delay, now;
do {
clock_gettime(CLOCK_REALTIME, &delay);
delay.tv_sec = 0;
delay.tv_nsec = 1000L * 1000L * 1000L - delay.tv_nsec;
nanosleep(&delay, NULL);
clock_gettime(CLOCK_REALTIME, &now);
mvprintw(1, 1, "%ld\n", (long)(now.tv_sec - start.tv_sec));
refresh();
key = getch();
if (key >= 0)
break;
} while (now.tv_sec - start.tv_sec < 60);
}
endwin();
return 0;
}
il avorte après avoir appuyé sur une touche (OK, en raison de cbreak()
en utilisant ctrl - C serait toujours travailler sans tout effort supplémentaire ...).
Mais nous pouvons rendre cela plus compliqué, comme ajouter une fonction pour mettre le compteur en pause ou le réinitialiser à la volée (+/- 1 seconde).
Nous avons absolument besoin d'une entrée clavier non bloquante pour cela.
Je me demande si c'est possible dans Gforth? OK, je sais comment attraper les interruptions comme SIGINT là, mais quelque chose comme ci-dessus, travaillant pour une clé ou une une clé prédéterminée?
Je supprime la balise C car cette question IMO a peu à voir avec C (c'est-à-dire ne bénéficiera pas de l'attention des programmeurs C). N'hésitez pas à le rajouter si vous n'êtes pas d'accord. – jforberg