diff options
Diffstat (limited to 'snake.c')
| -rw-r--r-- | snake.c | 16 |
1 files changed, 10 insertions, 6 deletions
@@ -2,15 +2,14 @@ #include <stdlib.h> #include <time.h> #include <pthread.h> -#include <signal.h> /* handling ctrl-c */ +#include <signal.h> //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 |
