linux c setitimer用法說明

來源:互聯網
上載者:User

標籤:setitimer   c   定時器   計時器   編程   

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

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

#include <sys/time.h>
setitimer函數原型:

int setitimer(int which, const struct itimerval *new_value,            struct itimerval *old_value);
其中which參數表示類型,可選的值有:

ITIMER_REAL:以系統真實的時間來計算,它送出SIGALRM訊號。 ITIMER_VIRTUAL:以該進程在使用者態下花費的時間來計算,它送出SIGVTALRM訊號。 ITIMER_PROF:以該進程在使用者態下和核心態下所費的時間來計算,它送出SIGPROF訊號。緊接著的new_value和old_value均為itimerval結構體,先看一下itimerval結構體定義:

struct itimerval {    struct timeval it_interval; /* next value */    struct timeval it_value;    /* current value */};struct timeval {    time_t      tv_sec;         /* seconds */    suseconds_t tv_usec;        /* microseconds */};
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值。

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

#include <stdio.h>#include <signal.h>#include <sys/time.h>void signalHandler(int signo){    switch (signo){        case SIGALRM:            printf("Caught the SIGALRM signal!\n");            break;   }}int main(int argc, char *argv[]){    signal(SIGALRM, signalHandler);    struct itimerval new_value, old_value;    new_value.it_value.tv_sec = 0;    new_value.it_value.tv_usec = 1;    new_value.it_interval.tv_sec = 0;    new_value.it_interval.tv_usec = 200000;    setitimer(ITIMER_REAL, &new_value, &old_value);        for(;;);         return 0;}

參考連結:

http://man7.org/linux/man-pages/man2/setitimer.2.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.