perl - 如何在 perl 中计算 "reliably"300 秒的时间?

标签 perl time

我怎样才能让 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/

相关文章:

perl - 如何将函数传递给构造函数

python - 如何*更改* struct_time 对象?

excel - 绘制持续时间图表

c - 文件修改时间作为 C 中的整数

Javascript 表单提交安全性

perl - 搜索非常大的文本文件并将大量术语中的任何一个匹配到另一个文件的输出行的最有效方法

Perl - 如何更改字符串中出现的每个 $variable ";"

perl - 为什么 printf 和 sprintf 在仅给定数组时表现不同?

java - ZonedDateTime hashCode() 与 isEqual() 一致吗?

ios - 通过 Multipeer Framework 暂时同步两个客户端