Perl中的Nano睡眠命令

时间:2011-07-18 14:30:27

标签: perl

我正在尝试使用perl脚本 使用Time :: HiRes qw(gettimeofday tv_interval usleep);

usleep(9.098888) usleep(9.091111)

我的脚本包含,上面的命令,我需要澄清, usleep会做多少回合? 如何使用nanosleep代替? (它会有多大的预测?)

提前致谢, Saranyya

1 个答案:

答案 0 :(得分:5)

答案取决于您的平台。

在我自己的Linux系统上,Perl的usleep已经调用nanosleep

$ strace -- perl -le 'use Time::HiRes; Time::HiRes::usleep(1);' 2>&1 | tail
open("/usr/share/perl/5.10/Exporter/Heavy.pm", O_RDONLY) = 4
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff375a5740) = -1 ENOTTY (Inappropriate ioctl for device)
lseek(4, 0, SEEK_CUR)                   = 0
read(4, "package Exporter::Heavy;\n\nuse st"..., 4096) = 4096
read(4, "nd without a leading &.\n\t    # ("..., 4096) = 2250
read(4, "", 4096)                       = 0
close(4)                                = 0
close(3)                                = 0
nanosleep({0, 1000}, NULL)              = 0
exit_group(0)                           = ?

(实际上,我很确定C库的usleep在内部调用nanosleep。)

您可以预期的实际分辨率取决于您的特定平台。这些睡眠功能可以在毫秒(尤其是长时间睡眠)中测量分辨率,并且它们总是尝试向上舍入。

如果您指定了硬件和操作系统的确切版本,则有人可能会为您追踪nanosleep的有效分辨率。