示例代码2:
[cpp] view plaincopyprint? 01.#include<stdio.h> 02.#include<pthread.h> 03.#include<signal.h> 04. 05.static void sig_alrm(int signo); 06.static void sig_init(int signo); 07.int 08.main() 09.{ 10. sigset_t set; 11. int sig; 12. sigemptyset(&set); 13. sigaddset(&set, SIGALRM); 14. pthread_sigmask(SIG_SETMASK, &set, NULL);//阻塞SIGALRM信号 15. 16. signal(SIGALRM, sig_alrm); 17. signal(SIGINT, sig_init); 18. sigwait(&set, &sig);//sigwait只是从未决队列中删除该信号,并不改变信号掩码。也就是,当sigwait函数返回,,它监听的信号依旧被阻塞。 19. switch(sig){ 20. case 14: 21. printf("sigwait, receive signal SIGALRMn"); 22. /*do the job when catch the sigwait*/ 23. break; 24. default: 25. break; 26. } 27. // sigdelset(&set, SIGALRM); 28. // pthread_sigmask(SIG_SETMASK, &set, NULL); 29. 30. for(;;) 31. {} 32. return 0; 33.} 34. 35.static void 36.sig_alrm(int signo) 37.{ 38. printf("after sigwait, catch SIGALRMn"); 39. fflush(stdout); 40. return ; 41.} 42. 43.static void 44.sig_init(int signo) 45.{ 46. printf("catch SIGINTn"); 47. return ; 48.}
#include<stdio.h> #include<pthread.h> #include<signal.h> static void sig_alrm(int signo); static void sig_init(int signo); int main() { sigset_t set; int sig; sigemptyset(&set); sigaddset(&set, SIGALRM); pthread_sigmask(SIG_SETMASK, &set, NULL);//阻塞SIGALRM信号 signal(SIGALRM, sig_alrm); signal(SIGINT, sig_init); sigwait(&set, &sig);//sigwait只是从未决队列中删除该信号,并不改变信号掩码。也就是,当sigwait函数返回,它监听的信号依旧被阻塞。 switch(sig){ case 14: printf("sigwait, receive signal SIGALRMn"); /*do the job when catch the sigwait*/ break; default: break; } // sigdelset(&set, SIGALRM); // pthread_sigmask(SIG_SETMASK, &set, NULL); for(;;) {} return 0; } static void sig_alrm(int signo) { printf("after sigwait, catch SIGALRMn"); fflush(stdout); return ; } static void sig_init(int signo) { printf("catch SIGINTn"); return ; }
(编辑:淮北站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|