Linux 下的 sleep

本文介绍了libev库中实现的sleep函数,展示了不同操作系统下的实现方式,并提供了代码示例。

摘要生成于 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

 

Linux下,sleep函数用于暂停程序的执行一段时间。它的参数是以秒为单位的延迟时间。例如,sleep(1)表示延迟1秒。\[1\]\[2\]在C语言中,可以使用sleep函数来实现延迟效果。例如,下面的代码会先输出"hello",然后延迟1秒,最后输出"world": #include <stdio.h> #include <unistd.h> int main() { printf("hello\n"); sleep(1); printf("world\n"); return 0; } 在这个例子中,程序会先输出"hello",然后调用sleep函数延迟1秒,最后输出"world"。sleep函数会暂停程序的执行,直到指定的延迟时间过去为止。\[2\] 另外,如果你想立即将输出显示在屏幕上,可以使用fflush函数刷新缓存。例如,下面的代码会先输出"hello",然后立即将输出显示在屏幕上,再延迟1秒,最后输出"world": #include <stdio.h> #include <unistd.h> int main() { printf("hello"); fflush(stdout); sleep(1); printf("world\n"); return 0; } 通过调用fflush(stdout)函数,可以强制刷新缓存,使得输出立即显示在屏幕上。\[3\] #### 引用[.reference_title] - *1* *2* *3* [Linux下的延迟函数sleep()](https://blog.youkuaiyun.com/nigulasi_dawei/article/details/72865390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值