阅读量:3
在Linux中,可以使用timer_create函数创建一个定时器,然后使用timer_settime函数设置定时器的间隔和触发方式。
下面是一个简单的示例代码:
#include <stdio.h> #include <stdlib.h> #include <signal.h> #include <time.h> timer_t timerid; void timer_handler(union sigval val) { printf("Timer expired\n"); } int main() { struct sigevent sev; struct itimerspec its; int ret; // 创建定时器 sev.sigev_notify = SIGEV_THREAD; sev.sigev_notify_function = timer_handler; sev.sigev_notify_attributes = NULL; sev.sigev_value.sival_ptr = NULL; ret = timer_create(CLOCK_REALTIME, &sev, &timerid); if (ret != 0) { perror("timer_create"); exit(1); } // 设置定时器的间隔和触发方式 its.it_interval.tv_sec = 1; // 间隔1秒 its.it_interval.tv_nsec = 0; its.it_value.tv_sec = 1; // 1秒后开始触发 its.it_value.tv_nsec = 0; ret = timer_settime(timerid, 0, &its, NULL); if (ret != 0) { perror("timer_settime"); exit(1); } // 主循环 while (1) { // 等待定时器触发 pause(); } return 0; }
在上面的代码中,首先使用timer_create函数创建一个定时器,然后通过设置sigev_notify_function字段指定定时器触发时要执行的函数。接下来,使用timer_settime函数设置定时器的间隔和触发方式(这里设置为每隔1秒触发一次)。最后,通过调用pause函数进入主循环,等待定时器触发。
当定时器触发时,会调用timer_handler函数打印一条消息。
注意,在使用定时器时需要确保编译时链接了librt库,可以使用-lrt选项进行链接。