如何在 Perl 中休眠一毫秒?

问题描述 投票:0回答:7

如何在 Perl 中睡眠时间短于一秒?

perl sleep
7个回答
120
投票

来自 sleep 的 Perldoc 页面:

对于比一秒更细粒度的延迟,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);

39
投票

时间::高分辨率:

  use Time::HiRes;
  Time::HiRes::sleep(0.1); #.1 seconds
  Time::HiRes::usleep(1); # 1 microsecond.

http://perldoc.perl.org/Time/HiRes.html


13
投票

来自perlfaq8


我怎样才能 sleep() 或alarm() 不到一秒?

如果您想要比 sleep() 函数提供的 1 秒更精细的粒度,最简单的方法是使用 select() 函数,如 select in perlfunc 中所述。尝试 Time::HiRes 和 BSD::Itimer 模块(可从 CPAN 获得,从 Perl 5.8 开始,Time::HiRes 是标准发行版的一部分)。


7
投票

使用时间::HiRes


5
投票

快速谷歌搜索“perl 高分辨率计时器”给出了对 Time::HiRes 的引用。也许这就是你想要的。


3
投票
system "sleep 0.1";

就可以了。


0
投票

对于 CLI 上的 1-liner(对于没有 GNU 的系统

sleep

perl -MTime::HiRes=usleep -e 'usleep(1000000);';

将休眠1秒。您可以通过在命令前添加

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
© www.soinside.com 2019 - 2024. All rights reserved.