mysleep——利用alarm pause函数实现版本
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
void sig_alrm(int signo)
{}
int mysleep(int second)
{
struct sigaction new,old;
int unslept = 0;
new.sa_handler = sig_alrm;
sigemptyset(&new.sa_mask);
new.sa_flags = 0;
sigaction(SIGALRM,&new,&old);
alarm(second);
pause();
unslept = alarm(0);
sigaction(SIGALRM,&old,NULL);
return unslept;
}
int main()
{
while(1)
{
mysleep(3);
printf("I have wait 3 second...\n");
}
return 0;
}
mysleep——利用sigsuspend函数实现
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
void sig_alrm(int signo)
{}
int mysleep(int second)
{
struct sigaction oldact,newact;
sigset_t newmask,oldmask,susmask;
int unslept;
newact.sa_handler = sig_alrm;
sigemptyset(&newact.sa_mask);
newact.sa_flags = 0;
sigaction(SIGALRM,&newact,&oldact);
sigemptyset(&newmask);
sigaddset(&newmask,SIGALRM);
sigprocmask(SIG_BLOCK,&newmask,&oldmask);
alarm(second);
susmask = oldmask;
sigdelset(&susmask,SIGALRM);
sigsuspend(&susmask);
unslept = alarm(0);
sigaction(SIGALRM,&oldact,NULL);
sigprocmask(SIG_SETMASK,&oldmask,NULL);
return unslept;
}
int main()
{
while(1)
{
mysleep(3);
printf("I have waited 3 second\n");
}
return 0;
}
本文介绍两种利用不同信号处理函数实现自定义延时的方法:一种使用`pause`函数,另一种采用`sigsuspend`函数。通过这两种方法,可以有效实现进程的定时暂停,适用于需要精确控制程序运行时间间隔的场景。
1797

被折叠的 条评论
为什么被折叠?



