我正在尝试使用perl脚本 使用Time :: HiRes qw(gettimeofday tv_interval usleep);
usleep(9.098888) usleep(9.091111)
我的脚本包含,上面的命令,我需要澄清, usleep会做多少回合? 如何使用nanosleep代替? (它会有多大的预测?)
提前致谢, Saranyya
答案 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
的有效分辨率。