歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux維護 >> Linux setitimer函數的操作技巧

Linux setitimer函數的操作技巧

日期:2017/3/2 10:32:23   编辑:Linux維護

Linux系統使用setitimer函數能夠事項高精度的定時功能,用於定時執行function,下面小編將針對setitimer函數的用法給大家做個詳細介紹,一起來了解下吧。

說明: setitimer一個進程中只能有一個 下一個會覆蓋前一個的定時 想一個進程多個定時器只能自己實現。

setitimer() 不支持在同一進程中同時使用多次以支持多個定時器。

linux有關定時器(setitimer)的敘述是這樣的:

linux系統給每個進程提供了3個定時器,每個定時器在各自不同的域裡面計數。當任何一個timer計數到結束了,系統就發送一個信號(signal)給該進程,同時計數器重置。

一共支持以下3中計數器形式:

ITIMER_REAL 在real time中計數器減1,然後等計數往比後發送SIGALRM信號。

ITIMER_VIRTUAL 當進程在執行的過程中計數,然後當計數完畢後發送SIGVTALRM信號給該進程。

ITIMER_PROF 在該進程被執行和系統在代表該進程執行的時間都進行計數

【getitimer/setitimer系統調用】

功能描述:

獲取或設定間歇計時器的值。系統為進程提供三種類型的計時器,每一類以不同的時間域遞減其值。當計時器超時,信號被發送到進程,之後計時器重啟動。

用法:

#include 《sys/time.h》

int getitimer(int which, struct itimerval *value);

int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

參數:

which:間歇計時器類型,有三種選擇

ITIMER_REAL //數值為0,計時器的值實時遞減,發送的信號是SIGALRM。

ITIMER_VIRTUAL //數值為1,進程執行時遞減計時器的值,發送的信號是SIGVTALRM。

ITIMER_PROF //數值為2,進程和系統執行時都遞減計時器的值,發送的信號是SIGPROF。

value,ovalue:時間參數,原型如下

struct itimerval

{

struct timeval it_interval;

struct timeval it_value;

};

struct timeval

{

long tv_sec;

long tv_usec;

};

getitimer()用計時器的當前值填寫value指向的結構體。

setitimer()將value指向的結構體設為計時器的當前值,如果ovalue不是NULL,將返回計時器原有值。

返回說明:

成功執行時,返回0。失敗返回-1,errno被設為以下的某個值

EFAULT:value或ovalue是不有效的指針

EINVAL:其值不是ITIMER_REAL,ITIMER_VIRTUAL 或 ITIMER_PROF之一

#include 《stdio.h》

#include 《unistd.h》

#include 《signal.h》

#include 《string.h》

#include 《sys/time.h》

#include 《errno.h》

void PrintMsg(int Num)

{

printf(“%s/n”, “Hello World”);

return;

}

int main(int argc, char* argv[])

{

signal(SIGALRM, PrintMsg);

struct itimerval tick;

tick.it_value.tv_sec = 10; //十秒鐘後將啟動定時器

tick.it_value.tv_usec = 0;

tick.it_interval.tv_sec =1; //定時器啟動後,每隔1秒將執行相應的函數

tick.it_interval.tv_usec = 0;

//setitimer將觸發SIGALRM信號

int ret = setitimer(ITIMER_REAL, &tick, NULL);

if ( ret != 0)

{

printf(“Set timer error. %s /n”, strerror(errno) );

return -1;

}

printf(“Wait!/n”);

getchar();

return 0;

}

上面就是Linux中setitimer函數的用法介紹了,setitimer函數擁有三種類型計時器選擇,為了達到更高精度的定時,還是選擇setitimer函數比較好。

Copyright © Linux教程網 All Rights Reserved