天天看點

linux c setitimer用法說明

在linux c程式設計中,setitimer是一個比較常用的函數,可用來實作延時和定時的功能,網上有各種零零散散的用法說明,都隻提到了個别用法,今天抽空實踐整理了一份比較詳細的:

使用時需要引入的頭檔案:

setitimer函數原型:

其中which參數表示類型,可選的值有:

ITIMER_REAL:以系統真實的時間來計算,它送出SIGALRM信号。

ITIMER_VIRTUAL:以該程序在使用者态下花費的時間來計算,它送出SIGVTALRM信号。

ITIMER_PROF:以該程序在使用者态下和核心态下所費的時間來計算,它送出SIGPROF信号。

緊接着的new_value和old_value均為itimerval結構體,先看一下itimerval結構體定義:

itimeval又是由兩個timeval結構體組成,timeval包含tv_sec和tv_usec兩部分,其中tv_se為秒,tv_usec為微秒(即1/1000000秒)

其中的new_value參數用來對計時器進行設定,it_interval為計時間隔,it_value為延時時長,下面例子中表示的是在setitimer方法調用成功後,延時1微秒便觸發一次SIGALRM信号,以後每隔200毫秒觸發一次SIGALRM信号。

settimer工作機制是,先對it_value倒計時,當it_value為零時觸發信号,然後重置為it_interval,繼續對it_value倒計時,一直這樣循環下去。

基于此機制,setitimer既可以用來延時執行,也可定時執行。

假如it_value為0是不會觸發信号的,是以要能觸發信号,it_value得大于0;如果it_interval為零,隻會延時,不會定時(也就是說隻會觸發一次信号)。

old_value參數,通常用不上,設定為NULL,它是用來存儲上一次setitimer調用時設定的new_value值。

以下是一個簡單的使用例子:

參考連結: