• 全部
  • 系统维护与使用
  • 应用程序开发
  • 内核源代码
  • 驱动程序开发
  • CPU和硬件区
  • UNIX文化
  • Solaris
  • Power Linux
  • 问答

linux下超时处理的问题

zxcdewq 2005-11-14 10:41:40
为什么在循环里只有第一次超时调用了jmptimeout函数,后来的超时处理没有起作用?

#include <setjmp.h>
#include <wait.h>

jmp_buf _jmp;

void jmptimeout(int sig)
{
signal(sig, SIG_IGN);
signal(SIGALRM, jmptimeout);
longjmp(_jmp, 1);
}

int jmp( )
{
if(signal(SIGALRM, jmptimeout) == SIG_ERR)
{
return -1;
}

if(setjmp( _jmp ) == 0)
{
alarm( 2 );

sleep( 4 );

alarm(0);
return 0;

}

alarm( 0 );
return -1;
}

int main(int argc, char *argv[])
{
int i;
for ( i=0; i<5; i++ )
{
jmp();
}

exit(0);
}
...全文
138 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
tb01412 2005-11-14
将你代码中的一段:
if(signal(SIGALRM, jmptimeout) == SIG_ERR)
{
return -1;
}
移动至main函数体的开头就行了
回复
bekars 2005-11-14
alarm和sleep不能同时用
回复
bekars 2005-11-14
程序没有贴全,看不出来你要做什么

超时可以用settimer做
回复
发帖
Linux/Unix社区
创建于2007-08-27

2.0w+

社区成员

Linux/Unix社区 应用程序开发区
申请成为版主
帖子事件
创建了帖子
2005-11-14 10:41
社区公告
暂无公告