【发布时间】:2015-05-12 19:17:23
【问题描述】:
我在 Perl 线程方面遇到了一些问题,需要您的帮助。
我想在 perl 中运行一些任务 [adb 执行一些命令]。我的要求是在执行命令完成后退出循环/线程,或者在指定时间 [比如 3 小时] 后终止执行任务本身。为此,我正在尝试使用:线程
任务 1 - 将执行一些事情 - 可能需要更少或更多的时间 任务 2 - 3 小时计时器
所以它正在部分工作。我的意思是一旦 ADB 任务完成就退出循环,而不是其他方式。
<pre>
use threads;
my $thr = threads->create(\&sub1); # Spawn the thread
$thr->detach(); # Now we officially don't care any more
my $thr = threads->create(\&sub2); # Spawn the thread
$thr->join();
#sleep_string(10); # Let thread run for awhile
sub sub1 {
sleep(10800);
}
sub sub2 {
Execute ADB task
}
</pre>
【问题讨论】:
-
当超时发生时,你可以给线程发送一个“线程信号”。如果您想干净地退出,您将有一个处理程序捕获该信号和
die。 (这仅在操作由 Perl 代码组成时才有效,因为“线程信号”仅在 Perl 指令之间检查。)这是简单的部分。困难的部分是等待线程完成或计时器结束。 -
必须是线程吗?因为
alarm()和fork()的组合很容易做到这一点。 -
谢谢ikegami,我会检查并告诉你
-
谢谢Sobrique,不一定是一个线程,所以请您提供更多输入
标签: multithreading perl