【问题标题】:Setting up the alarm in threads with a message if timed out如果超时,在线程中设置警报并显示消息
【发布时间】:2011-10-06 06:46:42
【问题描述】:

我指的是this 的问题,但不想在那里发布,因为它是半年前的并且已经回答了。

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

简短的上下文:客户端发送命令命令我的脚本运行自写的 perl 模块。如果该模块运行的时间超过了应有的时间,则需要将其杀死。这个“应该”非常具体,会写在每个模块的配置文件中。

我在一个简单的 perl 脚本中尝试了警报,它工作得很好——即使是我自己的消息。

我可以让警报退出脚本,但它根本没有给我任何消息。

使用this 示例,直到我注意到它可能与线程不同。

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

您是否需要任何代码来提供帮助,或者是否有一个网站提供了我可以使用但我没有找到的示例?

【问题讨论】:

  • 现在我正在尝试一种不同的方式:我将使用 iThreads,使用其中的 2 个,而第一个将杀死第二个,如果它在第一个完成定义的允许时间后仍在运行。现在不知道该怎么做,但我仍在寻找,所以我现在不会问;-)

标签: perl sockets alarm


【解决方案1】:

您是否已经尝试过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,默认情况下不记录任何内容,但您可以启用一些日志记录以查看它是否适合您对消息的需求。

【讨论】:

  • 谢谢,但我可能不会在系统上安装新的 api。此脚本将部署到 n 个服务器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
相关资源
最近更新 更多