一、alarm
如果不要求很精确的话,用 alarm() 和 signal() 就够了。
unsigned int alarm(unsigned int seconds)
专门为SIGALRM信号而设,在指定的时间seconds秒后,将向进程本身发送SIGALRM信号,又称为闹钟时间。进程调用alarm后,任何以前的alarm()调用都将无效。如果参数seconds为零,那么进程内将不再包含任何闹钟时间。如果调用alarm()前,进程中已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0。
示例:
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void sigalrm_fn(int sig)
{
printf("alarm!\n");
alarm(2);
return;
}
int main(void)
{
signal(SIGALRM, sigalrm_fn);
alarm(2);
while(1) pause();
}
二、setitimer
创建一个定时器:
int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
功能:创建一个POSIX标准得进程定时器
参数:@clock_id 可选系统得宏,
@sevp环境值,结构体struct sigevent变量得地址
@timerid定时器标识, 结构体timer_t变量得地址
编译:link with -lrt
返回值: 0–成功 ; -1 --失败 errno被设置
进程可以通过调用timer_create()创建特定得定时器,定时器是每个进程自己得,不是在fork时继承得。clock_id说明定时器是基于哪个时钟得,timerid装载得是被创建的定时器的ID。该函数创建了定时器,并将他的ID放入了timerid只指向的位置中。参数evp指定了定时器到期要产生的异步通知。如果evp为NULL,那么定时器到期就会产生默认的信号,对CLOCK_REALTIMER来说&#x