我需要知道如何为以下代码实现多线程。我需要每秒调用此脚本,但睡眠计时器会在 2 秒后处理它。总共脚本每 3 秒调用一次。但我需要每秒调用它,任何人都可以为我提供解决方案或为我指出正确的方向。
#!usr/bin/perl
use warnings;
sub print
{
local $gg = time;
print "$gg\n";
}
$oldtime = (time + 1);
while(1)
{
if(time > $oldtime)
{
&print();
sleep 2;
$oldtime = (time + 1);
}
}
这只是一个例子。
这是使用线程的简单示例:
use strict;
use warnings;
use threads;
sub threaded_task {
threads->create(sub {
my $thr_id = threads->self->tid;
print "Starting thread $thr_id\n";
sleep 2;
print "Ending thread $thr_id\n";
threads->detach(); #End thread.
});
}
while (1)
{
threaded_task();
sleep 1;
}
这将每秒创建一个线程。线程本身持续两秒钟。
要了解有关线程的更多信息,请参阅文档 http://perldoc.perl.org/threads.html。一个重要的考虑因素是变量不在线程之间共享。当您启动新线程时,将创建所有变量的重复副本。
如果需要共享变量,调查threads::shared http://perldoc.perl.org/threads/shared.html.
但是,请注意,正确的设计取决于您实际想要做什么。从你的问题中还不清楚。
对您的代码的一些其他评论:
- Always
use strict;
帮助您在代码中使用最佳实践。
- 声明词法变量的正确方法是
my $gg;
而不是local $gg;
. local
实际上并没有创建词法变量;它为全局变量提供本地化值。它不是您需要经常使用的东西。
- 避免给子例程提供与系统函数相同的名称(例如
print
)。这很令人困惑。
- 不建议使用
&
在调用子例程之前(在您的情况下,这是必要的,因为与系统函数名称冲突,但正如我所说,应该避免)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)