【轉】Linux 定時器setitimer()

來源:互聯網
上載者:User

標籤:style   blog   http   color   art   html   

http://blog.sina.com.cn/s/blog_590be5290100izdf.html

用法:
#include <sys/time.h>

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

 

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

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

ITIMER_REAL //數值為0,以系統真實的時間來計算,發送的訊號是SIGALRM。
ITIMER_VIRTUAL //數值為1,以該進程在使用者態下花費的時間來計算,發送的訊號是SIGVTALRM。
ITIMER_PROF //數值為2, 以該進程在使用者態下和核心態下所費的時間來計算,發送的訊號是SIGPROF。

 

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

struct itimerval {
    structtimeval it_interval;
    structtimevalit_value;   
};

struct timeval {
    longtv_sec;               
    longtv_usec;              
};

   itimerval結構中的it_value是減少的時間,當這個值為0的時候就發出相應的訊號了.然後再將it_value設定為it_interval值.也就是先處理it_value中設定的值,為0後發送訊號(根據which來判斷髮送什麼訊號),之後都是根據it_interval的值發送訊號。若it_value為0,就沒有相應的訊號產生了。

 

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


返回說明:
成功執行時,返回0。失敗返回-1,errno被設為以下的某個值
EFAULT:value 或ovalue是不有效指標
EINVAL:其值不是ITIMER_REAL,ITIMER_VIRTUAL 或 ITIMER_PROF之一

 

例子:

 1 void sigroutine(int signo) 2 { 3  static int count1=0,count2=0; 4  5  switch (signo) 6  { 7  case SIGALRM: 8   count1++; 9   printf("Catch a signal -- SIGALRM \n");10   printf("count1 = %d\n\n", count1);11   signal(SIGALRM, sigroutine);12   break;13  case SIGVTALRM:14   count2++;15   printf("Catch a signal -- SIGVTALRM \n");16   printf("count2 = %d\n\n", count2);17   signal(SIGVTALRM, sigroutine);18   break;19  }20  return;21 }22 23  24 25 int main()26 {27  struct itimerval value, ovalue, value2;28  printf("process id is %d\n", getpid());29 30  signal(SIGALRM, sigroutine);31  signal(SIGVTALRM, sigroutine);32 33  34 35  value.it_value.tv_sec = 2;36  value.it_value.tv_usec = 0;37  value.it_interval.tv_sec = 3;38  value.it_interval.tv_usec = 0;39  setitimer(ITIMER_REAL, &value, &ovalue);40 41  42 43  value2.it_value.tv_sec = 1;44  value2.it_value.tv_usec = 0;45  value2.it_interval.tv_sec = 3;46  value2.it_interval.tv_usec = 0;47  setitimer(ITIMER_VIRTUAL, &value2, &ovalue);48 49  50 51  while(1);52 }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.