diff options
Diffstat (limited to 'src/screen.c')
-rw-r--r-- | src/screen.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/screen.c b/src/screen.c index 7259fab..c72b9de 100644 --- a/src/screen.c +++ b/src/screen.c @@ -23,6 +23,8 @@ #include <assert.h> #include <curses.h> +#include <errno.h> +#include <poll.h> #include <stdbool.h> #include <stdlib.h> #include <unistd.h> @@ -69,7 +71,10 @@ screen_new(void) bool screen_main(struct screen *screen, struct speech *speech) { - bool play; + struct pollfd fds[] = { + { .fd = STDIN_FILENO, .events = POLLIN|POLLERR, .revents = 0 }, + }; + bool play; assert(screen); assert(speech); @@ -107,7 +112,10 @@ screen_main(struct screen *screen, struct speech *speech) speech_play_time(speech); play = false; } else { - sleep(1); + while (poll(fds, 1, 1000) < 0 && (errno == EINTR || + errno == EAGAIN)) { + continue; + } } } |