首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux C 編程:setitimer 高精度定時器與信號驅動程式設計

     編輯:關於C語言

setitimer 三種計時模式

模式計時依據產生信號
ITIMER_REAL真實時間 (牆鐘時間)SIGALRM
ITIMER_VIRTUAL進程使用者態 CPU 時間SIGVTALRM
ITIMER_PROF進程使用者態+核心態 CPU 時間SIGPROF

itimerval 結構體

struct itimerval {
    struct timeval it_interval;  // 間隔週期
    struct timeval it_value;     // 當前倒數值
};

struct timeval {
    time_t      tv_sec;   // 秒
    suseconds_t tv_usec;  // 微秒
};

運作機制:it_value 遞減至 0 → 發送信號 → 重載 it_interval 到 it_value → 繼續週期性觸發。

完整範例:每秒列印訊息

#include <stdio.h>
#include <sys/time.h>
#include <signal.h>
#include <unistd.h>

void handler(int sig) {
    if (sig == SIGALRM)
        puts("Get SIGALRM");
    signal(SIGALRM, handler);  // 重新安裝 (不可靠信號需求)
}

int main(void) {
    struct itimerval val = {
        .it_value = {1, 0},
        .it_interval = {1, 0}
    };
    signal(SIGALRM, handler);
    setitimer(ITIMER_REAL, &val, NULL);
    while (1) pause();  // 等待信號
    return 0;
}

不可靠信號與 sigaction

信號值 < SIGRTMIN (32) 為不可靠信號:處理後自動重置為預設動作。須在處理函數尾端重新 signal(),或改用 sigaction() 設定 SA_RESETHAND 旗標。sigaction 提供更精確控制(信號遮罩、旗標、擴充資訊)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved