我怎样才能让 5 分钟超时?
我的程序是这样做的:
# I need to try something every 3 seconds, for at most 5 minutes
$maxtime = time() + (5 * 60);
$success = 0;
while (($success == 0) && (time() < $maxtime)) {
$success = try_something();
sleep (3) if ($success == 0);
}
问题:这个程序在启动后运行。它运行的嵌入式系统没有 rtc/clock 电池。时钟从 2000 年 1 月 1 日开始,然后在它运行的第一分钟,它获取网络并且 ntp 将时钟设置为更新的时钟,使循环在 5 分钟超时之前退出。
即使系统时钟被其他外部程序更改,在 perl 脚本中“计数 5 分钟”的正确方法是什么?
最佳答案
我认为在这里使用闹钟功能是有意义的。
{
local $SIG{ALRM} = sub {
warn "Ooops! timed out, exiting";
exit(100); # give whatever exit code you want
};
## setup alaram
alarm( 5 * 60 );
my $success = 0;
until($success) {
$success = try_something()
or sleep 3;
}
## deactivate alarm if successful
alarm(0);
}
关于perl - 如何在 perl 中计算 "reliably"300 秒的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23695533/