Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 使用EV为以后安排活动_Perl_Events_Event Handling - Fatal编程技术网

Perl 使用EV为以后安排活动

Perl 使用EV为以后安排活动,perl,events,event-handling,Perl,Events,Event Handling,我使用EV定期(每5分钟)查询我的“事件队列”表,并触发任何超过“触发”时间的事件。这很有效 但通常,触发时间是几天或几周以后。因为我提前知道触发时间,所以我应该能够降低EV循环的频率,但仍能在请求的准确时间触发事件,而不必等到循环的下一次迭代 在电动汽车中有没有办法做到这一点?我想创建一个动态观察者是解决方案?这是如何做到的?类似于以下内容的内容应该可以做到这一点: use constant DB_CHECK_PERIOD => 5*60; sub handle_db_events {

我使用EV定期(每5分钟)查询我的“事件队列”表,并触发任何超过“触发”时间的事件。这很有效

但通常,触发时间是几天或几周以后。因为我提前知道触发时间,所以我应该能够降低EV循环的频率,但仍能在请求的准确时间触发事件,而不必等到循环的下一次迭代


在电动汽车中有没有办法做到这一点?我想创建一个动态观察者是解决方案?这是如何做到的?

类似于以下内容的内容应该可以做到这一点:

use constant DB_CHECK_PERIOD => 5*60;

sub handle_db_events {
   my ($w) = @_;

   while (1) {
      my $secs = ...get seconds to earliest unprocessed event from the db...;

      $secs //= DB_CHECK_PERIOD;
      if ($secs > 0) {
         $w->set($secs > DB_CHECK_PERIOD ? DB_CHECK_PERIOD : $secs, 0);
         return;
      }

      ... process events that have expired and delete them from the db ...;
   }
}

my $w = EV::timer(DB_CHECK_PERIOD, 0, \&handle_db_events);
handle_db_events($w);
如果无法从数据库中删除记录,则可以在记录中设置一个标志,表明该记录已被处理,或者可以使用按记录id索引的哈希


我假设
$w
作为第一个参数传递给回调。如果没有,请进行调整。

请添加一些伪代码或您想要实现的具体示例。谢谢,我想这是我想做的,但在EV的文档中看不到。问题是如何从周期事件中创建计时器事件,其中计时器事件独立存在?还是我太复杂了?