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

yutongjun108 2003-01-14 10:02:54
请用系统调用alarm和pause来实现函数sleep(seconds)
...全文
94 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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;
}

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧