Если мы возьмем очень простой счетчик использования библиотеки:Неблокирующая вход в 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;
}
она ликвидирует после нажатия любой клавиши (ОК, из-за cbreak()
с помощью Ctrl - C всегда будет работать без любые дополнительные усилия ...).
Но мы можем сделать это более сложным, например, добавить функцию для приостановки счетчика или сброса его на лету (+/- 1 секунду).
Для этого нам определенно нужен неблокирующий ввод клавиатуры.
Интересно, можно ли это сделать в Gforth? Хорошо, я знаю, как ловить прерывания, такие как SIGINT, но что-то вроде выше, для любой ключ или любой предопределенный ключ?
Я удаляю тег C как этот вопрос. ИМО имеет мало общего с C (то есть не будет интересоваться вниманием программистов C). Не стесняйтесь добавлять его обратно, если вы не согласны. – jforberg