📄 signal.c
字号:
#include <stdio.h>#include <stdlib.h>#include <signal.h>#include <pthread.h>#include <unistd.h>#include "Signal.h"#include "Data.h"#include "Resume.h"#include "Misc.h"extern int nthreads;extern struct thread_data *wthread;extern struct request *req;extern int bwritten;extern pthread_mutex_t bwritten_mutex;void * signal_waiter(void *arg){ int signal; arg = NULL; pthread_sigmask(SIG_UNBLOCK, &signal_set, NULL); while(1) { #ifdef SOLARIS sigwait(&signal_set); #else sigwait(&signal_set, &signal); #endif switch(signal) { case SIGINT: sigint_handler(); break; case SIGALRM: sigalrm_handler(); break; } }}void sigint_handler(void){ int i; printf("^C caught, saving download job...\n"); for (i = 0; i < nthreads; i++) { pthread_cancel(wthread[i].tid); wthread[i].status &= STAT_INT; /* Interrupted download */ } save_log(); exit(0);}void sigalrm_handler(void){ printf("Signal Alarm came\n"); updateProgressBar(bwritten, req->clength); alarm(1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -