几年前,当我最初学习Perl时,我发现自己想要说出类似的话:
sleep .07;
Run Code Online (Sandbox Code Playgroud)
但这实际上并不奏效.
有人教我使用:
select undef, undef, undef, .07;
Run Code Online (Sandbox Code Playgroud)
代替.
我一直想知道:这意味着什么,为什么它有效?
这使用了记录的第三种形式select:
Run Code Online (Sandbox Code Playgroud)select RBITS,WBITS,EBITS,TIMEOUT这会
select(2)使用指定的位掩码调用syscallRun Code Online (Sandbox Code Playgroud)....这样可以实现250毫秒的睡眠:
Run Code Online (Sandbox Code Playgroud)select(undef, undef, undef, 0.25);
实现此功能的更好方法是使用 Time::HiRes qw(usleep)
use Time::HiRes qw(usleep);
usleep($microseconds);
Run Code Online (Sandbox Code Playgroud)
在文档中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;
...
Run Code Online (Sandbox Code Playgroud)
据推测,这只是一个具有超时精度的任意命令sleep.这就是它的原因.这也在文档中进一步提到:
You can effect a sleep of 250 milliseconds this way:
select(undef, undef, undef, 0.25);
Run Code Online (Sandbox Code Playgroud)
TL; DR:这是一种通过select超时调用函数的方法.
| 归档时间: |
|
| 查看次数: |
1047 次 |
| 最近记录: |