summaryrefslogtreecommitdiff
path: root/snake.c
diff options
context:
space:
mode:
Diffstat (limited to 'snake.c')
-rw-r--r--snake.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/snake.c b/snake.c
index dc64d0a..f7097d9 100644
--- a/snake.c
+++ b/snake.c
@@ -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