1. 程式人生 > >Linux 下的 sleep

Linux 下的 sleep

delay libev 宏定義 one sig lib lin target sys

最近在閱讀 libev 的源碼,看到 libev 的代碼裏面的 sleep 實現, 我覺得可以把這個 sleep 實現單獨拿出來,作為參考,以後可以直接拿來用。

代碼如下(稍有修改):

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 是兩個宏定義,我直接把這兩個宏展開了。


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

Linux 下的 sleep