Linux 下的 sleep

本文介绍了libev库中sleep函数的实现方式,并提供了跨平台的睡眠功能实现代码。该实现适用于Windows和POSIX系统,利用nanosleep或select来达到延迟效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

最近在阅读 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

 

转载于:https://www.cnblogs.com/fengbohello/p/7143692.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值