久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

(二)Linux time test---事件類(lèi)型,、時(shí)間操作,、延時(shí)函數(shù)(轉(zhuǎn))_鮑國(guó)濤的空間...

 haliiz 2010-05-07

一,、時(shí)間類(lèi)型。

Linux下常用的時(shí)間類(lèi)型有4個(gè):time_t,,struct timeval,,struct timespec,struct tm,。
(1)time_t是一個(gè)長(zhǎng)整型,,一般用來(lái)表示用1970年以來(lái)的秒數(shù)。
(2)Struct timeval有兩個(gè)成員,,一個(gè)是秒,,一個(gè)是微妙。

       struct timeval

        {
              long tv_sec;        /**//* seconds */
                long tv_usec; /**//* microseconds */
         };
(3)struct timespec有兩個(gè)成員,,一個(gè)是秒,,一個(gè)是納秒。

          struct timespec

           {
                  time_t tv_sec;         /**//* seconds */
                  long    tv_nsec;        /**//* nanoseconds */
            };
(4)struct tm是直觀(guān)意義上的時(shí)間表示方法:

        struct tm

          {
                      int     tm_sec;         /**//* seconds */
                      int     tm_min;         /**//* minutes */
                      int     tm_hour;        /**//* hours */
                      int     tm_mday;        /**//* day of the month */
                      int     tm_mon;         /**//* month */
                      int     tm_year;        /**//* year */
                      int     tm_wday;        /**//* day of the week */
                      int     tm_yday;        /**//* day in the year */
                      int     tm_isdst;       /**//* daylight saving time */
           };
二,、 時(shí)間操作
(1) 時(shí)間格式間的轉(zhuǎn)換函數(shù)
主要是 time_t,、struct tm、時(shí)間的字符串格式之間的轉(zhuǎn)換,??聪旅娴暮瘮?shù)參數(shù)類(lèi)型以及返回值類(lèi)型:

char *asctime(const struct tm *tm);
char *ctime(const time_t *timep);
struct tm *gmtime(const time_t *timep);
struct tm *localtime(const time_t *timep);
time_t mktime(struct tm *tm);
gmtime和localtime的參數(shù)以及返回值類(lèi)型相同,區(qū)別是前者返回的格林威治標(biāo)準(zhǔn)時(shí)間,,后者是當(dāng)?shù)貢r(shí)間,。
(2) 獲取時(shí)間函數(shù)
兩個(gè)函數(shù),獲取的時(shí)間類(lèi)型看原型就知道了:

time_t time(time_t *t);
int gettimeofday(struct timeval *tv, struct timezone *tz);
前者獲取time_t類(lèi)型,,后者獲取struct timeval類(lèi)型,,因?yàn)轭?lèi)型的緣故,
前者只能精確到秒,,后者可以精確到微秒,。
三、 延時(shí)函數(shù)
主要的延遲函數(shù)有:sleep(),usleep(),nanosleep(),select(),pselect().

unsigned int sleep(unsigned int seconds);
void usleep(unsigned long usec);
int nanosleep(const struct timespec *req, struct timespec *rem);
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,struct timeval *timeout);
int pselect(int   n,   fd_set   *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask);


alarm函數(shù)是信號(hào)方式的延遲,,這種方式不直觀(guān),,這里不說(shuō)了。
僅通過(guò)函數(shù)原型中時(shí)間參數(shù)類(lèi)型,,可以猜測(cè)sleep可以精確到秒級(jí),,
usleep/select可以精確到微妙級(jí),nanosleep和pselect可以精確到納秒級(jí),。
而實(shí)際實(shí)現(xiàn)中,,linux上的nanosleep和alarm相同,都是基于內(nèi)核時(shí)鐘機(jī)制實(shí)現(xiàn),,受linux內(nèi)核時(shí)鐘實(shí)現(xiàn)的影響,,并不能達(dá)到納秒級(jí)的精度,man nanosleep也可以看到這個(gè)說(shuō)明,,man里給出的精度是:Linux/i386上是10 ms ,,Linux/Alpha上是1ms。
這里有一篇文章
http://blog.csdn.net/zhoujunyi/archive/2007/03/30/1546330.aspx,,測(cè)試了不同延遲函數(shù)之間的精確度,。文章給出的結(jié)論是linux上精度最高的是select,,10ms級(jí)別。我在本機(jī)器測(cè)試select和pselect相當(dāng),,都達(dá)到了1ms級(jí)的精度,,精度高于文章中給出的10ms,sleep在秒級(jí)以上和usleep/nanosleep相當(dāng),。下面貼下我機(jī)器上1ms時(shí)候的測(cè)試結(jié)果,,其他不貼了:

sleep           1000          0      -1000
usleep           1000       2974       1974
nanosleep        1000       2990       1990
select           1000        991         -9
pselect           1000        990        -10
gettimeofday           1000       1000          0
使用gettimeofday循環(huán)不停檢測(cè)時(shí)間,可精確微秒級(jí),,不過(guò)不適宜用來(lái)做定時(shí)器模塊,。
因此后面的定時(shí)器模塊選擇select為延遲函數(shù)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多