在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選項進行鏈接。