几年前,当我最初学习Perl时,我发现自己想要说些什么:
sleep .07;
但这实际上并不奏效。
有人教我使用:
select undef, undef, undef, .07;
代替。
我一直想知道: 这是什么意思,为什么它有效?
答案 0 :(得分:9)
使用记录的第三种select
形式:
select RBITS,WBITS,EBITS,TIMEOUT
使用指定的位掩码调用
select(2)
系统调用....
这样可以实现250毫秒的睡眠:
select(undef, undef, undef, 0.25);
实现此功能的更好方法是使用Time::HiRes qw(usleep)
use Time::HiRes qw(usleep);
usleep($microseconds);
答案 1 :(得分:5)
在the documentation for select
中,它的描述如下:
...
select RBITS,WBITS,EBITS,TIMEOUT
This calls the select(2) syscall with the bit masks specified,
which can be constructed using "fileno" and "vec", along these
lines:
$rin = $win = $ein = '';
vec($rin, fileno(STDIN), 1) = 1;
vec($win, fileno(STDOUT), 1) = 1;
$ein = $rin | $win;
...
据推测,这只是一个任意命令,其超时精度高于sleep
。这就是它的原因。文档中还提到了这一点:
You can effect a sleep of 250 milliseconds this way:
select(undef, undef, undef, 0.25);
TL; DR:这是一种在超时时调用select
函数的方法。