歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Unix C 延時函數小結

在多線程的應用中要用到延時函數,開始時我只用到 sleep 這個秒級函數,但在 solaris  上跑時,程序運行到sleep時,卻顯示 “Alarm clock” 這句話後就中止了。據說是產生了 alarm 這個信號,而系統默認信號處理就是中止程序,所以要在程序中把這個設置為忽略:

signal(SIGALRM, SIG_IGN); 

Unix 上的延時函數有好幾種:

一、 基礎知識
1、時間類型。Linux下常用的時間類型有4個:time_t,struct timeval,struct timespec,struct tm。
(1)time_t是一個長整型,一般用來表示用1970年以來的秒數。
(2)Struct timeval有兩個成員,一個是秒,一個是微妙。

  1. struct timeval {   
  2.    long tv_sec;        /**//* seconds */  
  3.    long tv_usec;  /**//* microseconds */  
  4. ;  

(3)struct timespec有兩個成員,一個是秒,一個是納秒。

  1. struct timespec{   
  2.     time_t  tv_sec;         /**//* seconds */  
  3.     long    tv_nsec;        /**//* nanoseconds */  
  4. };  

(4)struct tm是直觀意義上的時間表示方法:

  1. struct tm {   
  2.     int     tm_sec;         /**//* seconds */  
  3.     int     tm_min;         /**//* minutes */  
  4.     int     tm_hour;        /**//* hours */  
  5.     int     tm_mday;        /**//* day of the month */  
  6.     int     tm_mon;         /**//* month */  
  7.     int     tm_year;        /**//* year */  
  8.     int     tm_wday;        /**//* day of the week */  
  9.     int     tm_yday;        /**//* day in the year */  
  10.     int     tm_isdst;       /**//* daylight saving time */  
  11. };  

2、 時間操作

(1) 時間格式間的轉換函數

主要是 time_t、struct tm、時間的字符串格式之間的轉換。看下面的函數參數類型以及返回值類型:

  1. char *asctime(const struct tm *tm);   
  2. char *ctime(const time_t *timep);   
  3. struct tm *gmtime(const time_t *timep);   
  4. struct tm *localtime(const time_t *timep);   
  5. time_t mktime(struct tm *tm);  

gmtime和localtime的參數以及返回值類型相同,區別是前者返回的格林威治標准時間,後者是當地時間。

(2) 獲取時間函數

兩個函數,獲取的時間類型看原型就知道了:

  1. time_t time(time_t *t);   
  2. int gettimeofday(struct timeval *tv, struct timezone *tz);  

前者獲取time_t類型,後者獲取struct timeval類型,因為類型的緣故,前者只能精確到秒,後者可以精確到微秒。

Copyright © Linux教程網 All Rights Reserved