posix timer使用入门

张开发
2026/5/30 4:40:07 15 分钟阅读
posix timer使用入门
在c、c++开发中,如果使用定时器,我们经常会使用posix timer。posix timer使用较为灵活,本文介绍posix timer的使用。1example如下是使用posix timer的一个例子。主要使用了3个api:timer_create用于创建一个timer,但是timer创建之后,并没有启动;使用timer_settime可以启动定时器;使用timer_delete可以删除定时器。使用posix timer编译的时候要带-lrt。struct itimerspec { struct timespec it_value; // 定时器启动之后,第一次执行的时间 struct timespec it_interval; // 如果设置为0,那么定时器只执行一次;大于0,则是定时器的周期};#include stdlib.h #include stdio.h #include signal.h #include time.h #include unistd.h void timer_cb(union sigval sigev_value) { printf("timer callback\n"); } int main() { struct sigevent sev; struct itimerspec its; timer_t timer_id; sev.sigev_notify = SIGEV_THREAD; sev.sigev_notify_function = timer_cb; sev.sigev_notify_attributes = NULL; timer_create(CLOCK_BOOTTIME, sev, timer_id); its.it_interval.tv_sec = 1; its.it_interval.tv_nsec = 0; its.it_value.tv_sec = 1; its.it_value.tv_nsec = 0; timer_settime(timer_id, 0, its, NULL); sleep(10); timer_delete(timer_id); return 0; }2时钟源timer_create的第一个参数是clockid,表示时钟的类型。int timer_create(clockid_t clockid, struct sigevent *sevp, timer_t *timerid);linux中的时钟id比较多,在定时器中经常使用CLOCK_BOOTTIME或CLOCK_MONOTONIC。CLOCK_REALTIME从1970年1月1日8点开始的时间,这个就是系统时间,也叫墙上时间,比如2024年10月10日10时10分10秒。如果系统的时间会变化,比如系统开启了NTP网络时钟同步,这样的话系统时间

更多文章