一个跳出第三方代码的方法
来源:互联网 发布:asp数据库查询代码 编辑:程序博客网 时间:2024/04/28 09:29
项目中有一个代码,在数据库(otl_stream)调用open函数时,如果关闭网卡(ifdown eth0),open函数需20分钟才能返回,所以,我们需要有个超时的处理,不幸的是:otl_stream自带的超时机制对此问题无效。
想到用alarm + sigsetjmp的方法。
模拟测试代码:
#include <cstdio>#include <cstdlib>#include <unistd.h>#include <signal.h>#include <setjmp.h>sigjmp_buf jmpbuf;void sig_alm(int signo){ printf("signal let you break out!\n"); siglongjmp(jmpbuf, 1);}void print_forever(){ while (true) { printf("I can not stop printing...\n"); }}void test(){ for (int i = 0; i < 7; ++i) { printf("I am in [%d]\n", i); sleep(1); alarm(1); if (0 == sigsetjmp(jmpbuf, 1)) { print_forever(); } alarm(0); printf("I am out\n"); sleep(1); }}int main(int argc, char * argv[]){ if (SIG_ERR == signal(SIGALRM, sig_alm)) { return(1); } printf("start test...\n"); test(); printf("done!\n"); return(0);}
测试后证明,可以达到效果。
但是,这种方法至少有两个缺陷:
1. Windows下无此机制;
2. 一个进程只能有一个闹钟时间。而这里的open可能在多个子线程中同时调用,那么那些线程间就会相互影响;另外,如果调用模块也有alarm,则更会与调用模块相互影响。
考虑至此,只得作罢。
- 一个跳出第三方代码的方法
- Android引入第三方jar包的方法及如何将自己的代码封装成一个jar库
- 刷新APK调用第三方库的一个好方法
- android 启动第三方程序的代码
- android 启动第三方程序的代码
- 推荐一个豆瓣的第三方程序
- 一个播放器的第三方框架
- 发现一个python的第三方包
- RN好用的一个第三方
- 找到一个部分第三方jar包的混淆方法的地址
- PHP安装与使用VLD查看opcode代码【PHP安装第三方扩展的方法】
- JIN学习一、Android使用已有C/C++代码、第三方SO库的方法
- JIN学习一、Android使用已有C/C++代码、第三方SO库的方法
- PHP安装与使用VLD查看opcode代码【PHP安装第三方扩展的方法】
- JIN学习一、Android使用已有C/C++代码、第三方SO库的方法
- Android使用已有C/C++代码、第三方SO库的方法(JIN学习)
- PHP安装与使用VLD查看opcode代码【PHP安装第三方扩展的方法】
- PHP安装与使用VLD查看opcode代码【PHP安装第三方扩展的方法】
- 关于内部类的解释
- 抽出1个小时制作一款简单的物理小游戏(绳子原理)
- C#重绘TabControl的Tabpage标签,添加图片及关闭按钮
- 我的 MCMF 模板
- 运用项目管理的九大知识领域管理好自己的一生
- 一个跳出第三方代码的方法
- vi 操作 总结
- 子序列的最大乘积问题
- 面向对象编程——虚函数表和虚基类表
- Android联系人4--联系人查询
- 我的 强连通 模板
- java线程同步
- HDU 1800 Flying to the Mars
- s3c2410_gpio_cfgpin函数解析