这是一个使用线程的简单示例:
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;
}
这将每秒创建一个线程。线程本身持续两秒钟。
要了解有关线程的更多信息,请参阅文档。一个重要的考虑因素是线程之间不共享变量。当你开始一个新线程时,你所有的变量都会被复制。
如果您需要共享变量,请查看threads::shared
.
但是,请注意,正确的设计取决于您实际尝试做的事情。从你的问题中不清楚。
对您的代码的其他一些评论:
- 始终
use strict;
帮助您在代码中使用最佳实践。
- 声明词法变量的正确方法是
my $gg;
而不是local $gg;
. local
实际上并没有创建词法变量;它为全局变量提供本地化值。这不是您需要经常使用的东西。
- 避免给子例程赋予与系统函数相同的名称(例如
print
)。这令人困惑。
- 不建议
&
在调用子例程之前使用(在您的情况下,由于与系统函数名称冲突,这是必要的,但正如我所说,应该避免这种情况)。