Linux 下的 sleep

 

最近在閱讀 libev 的源碼,看到 libev 的代碼裏面的 sleep 實現, 我以爲能夠把這個 sleep 實現單獨拿出來,做爲參考,之後能夠直接拿來用。spa

代碼以下(稍有修改):code

void
ev_sleep (double delay)
{
    if (delay > 0.)
    {    
#if EV_USE_NANOSLEEP
        struct timespec ts;

        //EV_TS_SET (ts, delay);
        ts.tv_sec = (long)t; 
        ts.tv_nsec = (long)((t - ts.tv_sec) * 1e9);
        nanosleep (&ts, 0);
#elif defined _WIN32
        Sleep ((unsigned long)(delay * 1e3));
#else
        struct timeval tv;

        /* here we rely on sys/time.h + sys/types.h + unistd.h providing select */
        /* something not guaranteed by newer posix versions, but guaranteed */
        /* by older ones */
        //EV_TV_SET (tv, delay);
        tv.tv_sec = (long)t; 
        tv.tv_usec = (long)((t - tv.tv_sec) * 1e6);
        select (0, 0, 0, 0, &tv);
#endif
    }    
}

 

其中的 EV_TS_SET 和 EV_TV_SET 是兩個宏定義,我直接把這兩個宏展開了。blog


同步發佈:http://www.fengbohello.top/point/p/895get

相關文章
相關標籤/搜索