溫馨提示×

Linux中Timer定時器怎么使用

小億
303
2023-10-26 10:30:41
欄目: 智能運維

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

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女