zoukankan      html  css  js  c++  java
  • setitimer()函数使用

    setitimer()为Linux的API,并非C语言的Standard Library,setitimer()有两个功能,一是指定一段时间后,才执行某个function,二是每间格一段时间就执行某个function,以下程序demo如何使用setitimer()。

    /*  
    Filename    : timer.cpp 
      
    Description : setitimer() set the interval to run function 
     
    Synopsis    : #include <sys/time.h> 
     
                  int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue); 
     
                  struct itimerval { 
     
                    struct timerval it_interval; 
     
                    struct timerval it_value; 
     
                  };  
      
                  struct timeval { 
     
                    long tv_sec; 
     
                    long tv_usec; 
     
                  }              
    */  
     
    #include <stdio.h>    // for printf()  
     
    #include <unistd.h>   // for pause()  
     
    #include <signal.h>   // for signal()  
     
    #include <string.h>   // for memset()  
     
    #include <sys/time.h> // struct itimeral. setitimer()  
      
        
    void printMsg(int);  
        
    int main() {  
      
      // Get system call result to determine successful or failed  
      int res = 0;  
      
      // Register printMsg to SIGALRM   
      signal(SIGALRM, printMsg);  
      
      struct itimerval tick;  
      
      // Initialize struct    
      memset(&tick, 0, sizeof(tick));  
      
      // Timeout to run function first time    
      tick.it_value.tv_sec = 1;  // sec  
      
      tick.it_value.tv_usec = 0; // micro sec.  
      
      // Interval time to run function   
      tick.it_interval.tv_sec = 1;  
      
      tick.it_interval.tv_usec = 0;  
      
      // Set timer, ITIMER_REAL : real-time to decrease timer,  
      
      //                          send SIGALRM when timeout  
      
      res = setitimer(ITIMER_REAL, &tick, NULL);    
      if (res) {  
      
        printf("Set timer failed!!/n");  
      
      }  
        
      // Always sleep to catch SIGALRM signal  
      
      while(1) {  
      
        pause();  
      
      }  
      
      return 0;    
      }  
        
    void printMsg(int num) {  
      
      printf("%s","Hello World!!/n");  
      
    }  

    当setitimer()所执行的timer时间到了,会呼叫SIGALRM signal,itimerval.it_value设定第一次执行function所延迟的秒数, itimerval.it_interval设定以后每几秒执行function,所以若只想延迟一段时间执行function,只要设定 itimerval.it_value即可,若要设定间格一段时间就执行function,则it_value和it_interval都要设定,否则 funtion的第一次无法执行,就别说以后的间隔执行了。

  • 相关阅读:
    204. Count Primes (Integer)
    203. Remove Linked List Elements (List)
    202. Happy Number (INT)
    201. Bitwise AND of Numbers Range (Bit)
    200. Number of Islands (Graph)
    199. Binary Tree Right Side View (Tree, Stack)
    198. House Robber(Array; DP)
    191. Number of 1 Bits (Int; Bit)
    190. Reverse Bits (Int; Bit)
    189. Rotate Array(Array)
  • 原文地址:https://www.cnblogs.com/xf-linux-arm-java-android/p/3740918.html
Copyright © 2011-2022 走看看