如何在Perl中睡眠一毫秒?


76

在Perl中,我怎么睡不到一秒钟?


22
因为我相信这个标题实际上会更有帮助。让我尝试对此进行论证。BDF所做的是重复标题中的问题,没有增加表达性。当我在网上搜索答案时,我实际上是在寻找毫秒级的睡眠,而不是“短于一秒”的睡眠。我说这个版本比BDF更好地被其他Google搜索打中。如果我错了,请纠正我。
ˈoʊsɪks09年

Answers:


109

从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);

7
注意:尽管您可以进行nanosleep(1),但许多OS都具有最低粒度。例如,我相信它在Windows XP中是1毫秒,因此您在那里仍然要休眠1000000 ns。
Piskvor

13
Time :: HiRes页面上显示类似“如果您需要nanosleep(),则应重新考虑Perl是否是您工作的最佳工具”。
克里斯·卢茨

4
还有Time :: HiRes :: sleep(0.3),它将休眠0.3秒。
Peter N Lewis,


12

perlfaq8


如何在不到一秒钟的时间内休眠()或警报()?

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




-1
system "sleep 0.1";

绝招。


它实际上对我有用(虽然不优雅,但出于调试目的,它似乎起作用了)。
PiotrK
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.