为什么 c 中 usleep 和 sleep 完成程序的时间过程不同?

Why does the time process to complete the program differ between usleep and sleep in c?

#include<stdio.h>
 
main()
{
   printf("Sleep for 5 milisecond to exit.\n");
   sleep(0.005);
   printf("usleep for 5 milisecond to exit.\n");
   usleep(5000);
   return 0;
}

与 usleep 函数相比,sleep 函数需要花费更多的时间来执行?

sleep 系统调用在 POSIX 系统上的 <unistd.h> 中定义为:

unsigned int sleep(unsigned int seconds);

如果不包含 <unistd.h>,则不会定义 sleep 函数,编译器会使用过时的 pre-ansi 语义推断出 int sleep(double) 的原型。这具有未定义的行为。系统接收到的实际 unsigned int 值可能是任何值,如您所见,这可能会导致长时间停顿,但也可能会崩溃,具体取决于系统的 ABI...

如果您通过包含 <unistd.h> 来包含正确的定义,0.005 双参数将隐式转换为 0 并且程序根本不会暂停。

另请注意,省略 main() 的 return 类型是一项过时的功能。避免这种旧式编程并升级您的编译器。

建议启用所有警告以避免此类愚蠢的错误:将 -Wall -Wextra -pedantic 选项与 gccclang 一起使用。

另请注意,sleepusleep 都可能导致程序停止的时间超过参数中指定的时间,具体取决于当前的系统负载。