From 0e1eed88f1adf24923d03c120186f131dbc020fd Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Mon, 6 Feb 2023 00:43:24 -0800 Subject: fixed a bug where the listener thread did not exit when ctrl+c was sent. updated license --- snake.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'snake.c') diff --git a/snake.c b/snake.c index dc64d0a..f7097d9 100644 --- a/snake.c +++ b/snake.c @@ -2,15 +2,14 @@ #include #include #include -#include /* handling ctrl-c */ +#include //handling ctrl-c #include "vector.h" #include "snake.h" #include "conio.h" volatile sig_atomic_t INT_CTRL_C = 0; -/* Unsafe functions like printf cannot be called in async - * interrupt handler */ +// unsafe functions like printf cannot be called in async interrupt handler void interrupt_handler(int sig) { INT_CTRL_C = 1; } @@ -24,7 +23,7 @@ vector_t lastMoveDir; int main(int argc, char **argv) { printf("\e[?25l"); /* hide cursor */ - /* Make a new thread handling interrupts */ + //make a new thread handling interrupts signal(SIGINT, interrupt_handler); //init values @@ -51,10 +50,15 @@ int main(int argc, char **argv) { pthread_create(&listenerID, NULL, get_dir_loop, &threadArg); //main game logic loop while(1) { - /* handle ctrl-c interrupt */ + // handle ctrl-c interrupt if (INT_CTRL_C) { + //unhide cursor printf("\e[?25h"); - exit(0); + //kill the listener thread + *cancellationToken = 1; + printf("Press any key to exit\n"); + pthread_join(listenerID, NULL); + return 0; } //first, draw the current state of the board -- cgit v1.3.1