几年前,当我刚开始学习Perl时,我发现自己想说这样的话:
sleep .07;但这实际上行不通。
有人教我用:
select undef, undef, undef, .07;而不是。
我一直在想:这意味着什么,为什么会起作用?
发布于 2014-07-14 23:28:27
在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函数的方法。
发布于 2014-07-14 23:30:04
它使用第三种形式的select,如文档所示:
选择RBITS、WBITS、EBITS、TIMEOUT 这将使用指定的位掩码调用
select(2)系统调用。 …… 您可以通过这种方式实现250毫秒的睡眠: 选择( undef,0.25);
实现此功能的更好方法是使用Time::HiRes qw(usleep)
use Time::HiRes qw(usleep);
usleep($microseconds);https://stackoverflow.com/questions/24747561
复制相似问题