歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Unix C 延時函數小結

Unix C 延時函數小結

日期:2017/3/1 10:18:48   编辑:Linux編程

在多線程的應用中要用到延時函數,開始時我只用到 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