您的位置:首页 > 其它

使用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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐