首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

施用alarm和setjmp实现超时控制

2013-04-12 
使用alarm和setjmp实现超时控制#include stdio.h#include stdlib.h#include string.h#include unis

使用alarm和setjmp实现超时控制

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <signal.h>#include <setjmp.h>#define JMP_VALUE 12345static jmp_buf test_jmp_env;static void test_alarm(int n){printf("alarm signal:%d\r\n", n);    longjmp(test_jmp_env, JMP_VALUE);}void DoSomething(){int i = 0;while(1){printf("%d\r\n", i++);sleep(1);}}void DoSomethingWithTimeout(int nTimeout){__sighandler_t old_handler = signal(SIGALRM, test_alarm);alarm(nTimeout);int n = setjmp(test_jmp_env);printf("setjmp result:%d\r\n", n);if(JMP_VALUE == n){signal(SIGALRM, old_handler);return;}else if(0 == n){DoSomething();alarm(0);signal(SIGALRM, old_handler);}else{printf("error\r\n");exit(-1);}}int main(void){DoSomethingWithTimeout(5);printf("go on to do...\r\n");return 0;}


热点排行