我如何在Perl中睡眠少于一秒钟?
从Perl文档页面中的sleep函数得知:
对于需要精度高于一秒的延迟,可以使用Time::HiRes模块(从CPAN获得,并且在Perl 5.8中成为标准分发组件)提供的usleep()。
事实上,它提供了usleep()
(以微秒为单位睡眠)和nanosleep()
(以纳秒为单位睡眠)。您可能想使用usleep()
,这应该让您更容易地处理数字。1毫秒休眠(使用每个函数):
use strict;
use warnings;
use Time::HiRes qw(usleep nanosleep);
# 1 millisecond == 1000 microseconds
usleep(1000);
# 1 microsecond == 1000 nanoseconds
nanosleep(1000000);
如果您不想要(或不能)加载模块来执行此操作,则您可能还可以使用内置的select()
函数:
# Sleep for 250 milliseconds
select(undef, undef, undef, 0.25);
Time::HiRes:
use Time::HiRes;
Time::HiRes::sleep(0.1); #.1 seconds
Time::HiRes::usleep(1); # 1 microsecond.
来自 perlfaq8:
如何让 sleep() 或 alarm() 小于一秒?
如果您需要比 sleep() 函数提供的1秒更细的粒度,则最简单的方法是使用 select() 函数,具体请参阅perlfunc中的select文档。可以尝试使用 Time::HiRes 和 BSD::Itimer 模块(可从CPAN获取,从Perl 5.8开始,Time::HiRes已成为标准发行版的一部分)。
system "sleep 0.1";
sleep
实用程序的Linux和许多其他系统,但在BSD、MacOS、busybox-Linux等系统上可能无法正常运行。(实际上,它可能会在BSD/MacOS上运行,这取决于分发版中是否包含了相应的sleep命令) - undefinedperl -MTime::HiRes=usleep -e 'usleep(1000000);';
time
来验证这一点。因此,要将微秒转换为毫秒,将您预期的毫秒乘以1000。~ otheus$ time perl -MTime::HiRes=usleep -e 'usleep(1000000);';
real 0m1.032s
user 0m0.011s
sys 0m0.010s
~ otheus$ time perl -MTime::HiRes=usleep -e 'usleep(500000);';
real 0m0.547s
user 0m0.010s
sys 0m0.026s