在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选项进行链接。