我创建了简单的代码来测试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()为什么无法正确执行?
与我可以用来代替睡眠的所有系统兼容的绝对最佳功能是什么?
答案 0 :(得分:5)
输入man 3 sleep
并阅读。
sleep
需要一个unsigned int
参数。它只能睡整秒钟。
如果将不同数字类型的参数传递给它,则它将隐式转换为unsigned int
。将浮点值转换为整数类型会被截断。
假设sleep
函数的声明是可见的。在您的程序中,您没有必需的#include <unistd.h>
。在C99或更高版本中,调用没有可见声明的函数是非法的。在C90中,编译器将对该函数做出某些假设。在这种情况下,您的程序的行为是不确定的。
所以sleep(.5)
等效于sleep(0)
。
在系统文档中搜索usleep
(微秒)或nanosleep
(纳秒)。