为什么 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
选项与 gcc
和 clang
一起使用。
另请注意,sleep
和 usleep
都可能导致程序停止的时间超过参数中指定的时间,具体取决于当前的系统负载。
#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
选项与 gcc
和 clang
一起使用。
另请注意,sleep
和 usleep
都可能导致程序停止的时间超过参数中指定的时间,具体取决于当前的系统负载。