signal.c

来自「linux下多线程的下载软件源码」· C语言 代码 · 共 67 行

C
67
字号
#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 + =
减小字号Ctrl + -
显示快捷键?