gpt4 book ai didi

perl - 当 sleep() 不能很好地处理警报时,我还能做什么 'sleep'?

转载 作者:行者123 更新时间:2023-12-04 14:50:34 27 4
gpt4 key购买 nike

有很多文件说“你应该避免使用带警报的 sleep ,因为许多系统使用警报来实现 sleep ”。实际上,我正在为这个问题而苦恼。
那么,当 sleep() 不能很好地处理警报时,是否有人可以帮助我“ sleep ”?我已经尝试过 Time::HiRes 模块的 'usleep' 和 select() 函数。但他们也没有工作。

最佳答案

鉴于您被闹钟打断,因此无法可靠地使用 sleep() 或 select(),我建议将 Time::HiRes::gettimeofday 与 select() 结合使用。

这是一些我没有测试过的代码。它应该能够抵抗被信号打断,并且会休眠所需的秒数加上最多 0.1 秒。如果您愿意消耗更多的 CPU 周期而无济于事,则可以使分辨率更好:

...
alarm_resistant_sleep(5); # sleep for 5 seconds, no matter what
...

use Time::HiRes;

sub alarm_resistant_sleep {
my $end = Time::HiRes::time() + shift();
for (;;) {
my $delta = $end - Time::HiRes::time();
last if $delta <= 0;
select(undef, undef, undef, $delta);
}
}

关于perl - 当 sleep() 不能很好地处理警报时,我还能做什么 'sleep'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6855796/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com