我正在尝试使用Time :: HiRes qw的perl脚本(gettimeofday tv_interval usleep);
usleep(9.098888)usleep(9.091111)
我的脚本包含,上面的命令,我需要澄清一下,我们会做多少回合?如何使用nanosleep代替?(它会有多大的预测?)
谢谢,Saranyya
答案取决于您的平台.
在我自己的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) = ?
Run Code Online (Sandbox Code Playgroud)
(实际上,我很确定C库的内部usleep调用nanosleep.)
您可以期望的实际分辨率取决于您的特定平台.这些睡眠功能可以以毫秒为单位测量分辨率(特别是对于长时间睡眠),并且它们总是尝试向上舍入.
如果您指定了硬件和操作系统的确切版本,则可能有人可能会nanosleep为您追踪有效的分辨率.