使用float作为参数的sleep()无法正常工作

时间:2018-06-30 00:37:03

标签: c floating-point sleep

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

我尝试执行以下代码以使程序等待5秒钟才能终止:

result = [s for s in DNA_list if re.match(r'^ATG.*TAG$', s)]

但是它等待大约100毫秒。好吧,绝对不到一秒钟。

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

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

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

程序运行正常(退出前等待10秒钟)。

为什么参数为浮点数时sleep()为什么无法正确执行?

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

1 个答案:

答案 0 :(得分:5)

输入man 3 sleep并阅读。

sleep需要一个unsigned int参数。它只能睡整秒钟。

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

假设sleep函数的声明是可见的。在您的程序中,您没有必需的#include <unistd.h>。在C99或更高版本中,调用没有可见声明的函数是非法的。在C90中,编译器将对该函数做出某些假设。在这种情况下,您的程序的行为是不确定的。

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

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