linux 应用层定时器

本文介绍了Linux应用层的三种定时器:alarm、setitimer和sleep。alarm函数用于设置SIGALRM信号的触发时间,setitimer允许创建和管理POSIX定时器,其精度更高并支持多种通知方式。sleep和usleep函数则提供了简单的休眠功能。setitimer的clock_id参数可以选择不同的时钟类型,通过timer_settime启动定时器,而timer_delete用于删除定时器。select函数可用于实现精确的定时和休眠,适用于简单的定时任务。
摘要由CSDN通过智能技术生成

一、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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值