【问题标题】:sleep() with float as parameter not working以浮点数为参数的睡眠()不起作用
【发布时间】:2018-12-09 04:26:50
【问题描述】:

我创建了简单的代码来测试 sleep() 函数。在 C 中。

我尝试执行以下代码,程序在终止前等待 5 秒:

#include <stdlib.h>
#include <stdio.h>

int main(){
    int n=0;
    for (n=1;n<=10;n++){
        sleep(.5);
    }
    return 0;
}

但是它会等待大约 100 毫秒。嗯,肯定不到一秒。

现在,如果我改为执行以下代码:

#include <stdlib.h>
#include <stdio.h>

int main(){
    int n=0;
    for (n=1;n<=10;n++){
        sleep(1);
    }
    return 0;
}

程序按预期运行(在退出前等待 10 秒)。

为什么当参数为float时sleep()无法正常执行?

什么是与我可以用来代替睡眠的所有系统兼容的绝对最佳功能?

【问题讨论】:

  • 我很惊讶一个 1k 用户的研究如此之少。快速查看文档会告诉您sleep 将整数作为参数。在 SO 上也很容易找到第二个问题的答案。
  • 另外,请阅读标签说明。调试标签完全不适合这个问题。
  • 您没有收到有关sleep 的隐式声明的警告吗?
  • 请不要认为idownvotedbecau.se/noresearch ,但这可能是反对票的原因。

标签: c floating-point sleep


【解决方案1】:

输入man 3 sleep 并阅读。

sleep 需要 unsigned int 参数。它只能休眠整秒。

如果您将不同数值类型的参数传递给它,它会隐式转换为unsigned int。将浮点值转换为整数类型会截断。

这是假设sleep 函数的声明是可见的。在您的程序中,您没有所需的#include &lt;unistd.h&gt;。在 C99 或更高版本中,调用没有可见声明的函数是非法的。在 C90 中,编译器会对函数做出某些假设。在这种情况下,您的程序的行为是未定义的。

所以sleep(.5) 等价于sleep(0)

在您的系统文档中搜索usleep(微秒)或nanosleep(纳秒)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 2019-01-21
    • 2017-07-16
    • 2020-07-04
    相关资源
    最近更新 更多