使用alarm和setjmp实现超时控制
2013-04-03 15:02
316 查看
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <signal.h> #include <setjmp.h> #define JMP_VALUE 12345 static 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; }
相关文章推荐
- setjmp 及 alarm实现带超时限制调用read
- 使用Python简单的实现树莓派的WEB控制
- iPhone开发之UIScrollView滚动组件的使用(三) 拖线实现按钮控制大图移动之contentInsets增加内容边距
- C#使用COM+实现事务控制,操作多个数据库
- 使用并发工具实现 RPC 调用流量控制
- FleaPHP 开发指南 - 8. 如何使用 RBAC 组件实现访问控制
- Linux-Shell-使用mkfifo实现多任务并发及并发数控制
- golang基础-chan的select操作、定时器操作、超时控制、goroutine中使用recover
- golang基础-chan的select操作、定时器操作、超时控制、goroutine中使用recover
- Unity之触屏控制_实现模型旋转和缩放—Touch类的使用
- 使用js实现带有停顿效果的图片滚动(按钮控制)
- MFC中如何使用OnTimer()函数实现定时控制
- 在connect中使用select实现超时处理
- Struts2使用Interceptor实现权限控制的应用实例详解
- 使用 jQuery Mobile API 实现细粒度的自定义控制
- 基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(六)使用domoticz联合arm上的mosquitto实现Android客户端远程控制
- 天猫精灵使用体验之二——家用电器的智能化改造(借助天猫精灵实现家用电器的语音控制)
- 单片机:按键(使用中断)控制数码管的数字加减(c语言实现)
- .Net中VSS实现版本控制管理的一些使用方法
- 使用GdipDrawDriverString实现行距及字符间距控制