用alarm和pause来实现sleep:分不够可在加

yutongjun108 2003-01-14 10:02:54
请用系统调用alarm和pause来实现函数sleep(seconds)
...全文
64 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cwhh 2003-01-14
void sig_alarm(int signal)
{
return;
}
void sleep2(int seconds)
{
signal(SIGALRM,sig_alarm);
alarm(seconds);
while(pause()==-1&&errno=EINTR) return;
}
  • 打赏
  • 举报
回复
ari 2003-01-14
执行非本地跳转。简单的讲就是跨函数goto
在这里的功能是避免在pause调用之前捕捉到信号,
从而将程序陷入pause
具体用法可以
参阅unix/linux 手册.
============================
man setjmp
man longjmp
  • 打赏
  • 举报
回复
salaciouswolf 2003-01-14
ari(薛定锷) :
薛大虾,能不能解释一下setjmp和longjmp的功能,以及在此程序中的作用?
谢谢了,我是菜鸟,别见笑!
  • 打赏
  • 举报
回复
ari 2003-01-14
static jmp_buf jmpbuf;
#define JMPVAL 1

static
void sig_alarm(ing signo)
{
longjmp( jmpbuf, JMPVAL );
return;
}
void sleep3( int seconds )
{
int jmpval=0;

signale( SIGALRM, sig_alarm );
alarm(seconds);
jmpval = setjmp( jmpbuf );

if( jmpval == 0 )
pause();
else
return;
}
  • 打赏
  • 举报
回复
相关推荐
发帖
Linux/Unix社区
加入

2.1w+

社区成员

Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
申请成为版主
帖子事件
创建了帖子
2003-01-14 10:02
社区公告
暂无公告