如果超时,则在带有消息的线程中设置警报

时间:2011-10-06 06:46:42

标签: perl sockets alarm

我正在提及this问题,但不想像半年前那样将其发布在那里&它已经回答了。

我认为我需要在线程中设置警告,因为它正在侦听连接(套接字),我不知道在客户端发出命令之前设置警报的时间。

短上下文:客户端发出命令,命令我的脚本运行自写的perl模块。如果它运行的时间比应该的长,则需要杀死该模块。这个“应该”非常具体,将在每个模块的配置文件中写入。

我在一个简单的perl脚本中尝试了闹钟,它运行得很好 - 即使是我自己的消息。

我可以让闹钟退出剧本,但它根本没有给我留言。

使用this示例,直到我发现可能与线程不同。

然后我尝试了 Thread :: alarm($ time),但是当我在3周前开始使用perl时,我无法正确实现它(它什么也没做。它确实没有。甚至没有结束该计划。)

您是否需要任何代码才能提供帮助,或者是否有一个网站上有我可以使用的示例以及我找不到的示例?

1 个答案:

答案 0 :(得分:0)

您是否已尝试AnyEvent

AnyEvent让你设置观察者像定时器一样:

# one-shot or repeating timers
my $w = AE::timer $seconds,         0, sub { ... }; # executed only once 
my $w = AE::timer $seconds, $interval, sub { ... }; # executed every $interval

$seconds可以在配置阶段,在线程开始时定义。

在回调中,您可以使用与杀死程序相同的代码。 AnyEvent的日志框架也AnyEvent::Log,默认情况下不记录任何内容,但您可以启用一些日志记录,以查看它是否符合您对消息的需求。