我如何创建一个将在while循环中运行的函数,而没有任何与我的主代码并行的终止
sub somefunction{
while(1){
print $a+$b;
}
}
my $a=1;
my $b=2;
somefunction(); #make it work without termination
#Main Body
while (1) {
$c = <STDIN>;
print $a+$b+$c;
}
这只是我想要做的事情,somefunction()
应始终打印$a+$b
,我已阅读过。我看过perl threads,但使用threads->create('somefunction', '');
并没有给我任何期待的结果......
答案 0 :(得分:2)
这是一个比你想象的更复杂的问题。线程可以解决问题,但是通过任何并行处理,您会遇到一些有趣的潜在问题。
线程是并行运行的子例程。但是,当它启动时,它会继承程序的内存状态,并使用它。
在您列出的示例中,$a
和$b
不在您的子资源范围内,因此它不会做任何事情。 (注意 - 这些是使用不好的变量,因为sort
会使用它们 - 因此,如果你误用它们,他们就会在strict
和warnings
下敲响警钟。 )。
这样的事情将会工作&#39;:
#!/usr/bin/perl
use strict;
use warnings;
use threads;
my $param_1 = 1;
my $param_2 = 2;
sub parallel_part {
while ( 1 ) {
print $param_1 + $param_2, "\n";
sleep 1;
}
}
#Main Body
#start our thread...
my $thr = threads -> create ( \¶llel_part );
while (1) {
my $input_value = <STDIN>;
print $param_1 + $param_2 + $input_value,"\n";
}
#wait for our thread to exit
#will never happen, because we've got two 'while true' loops.
$thr -> join();
这虽然是一个人为的例子 - 真正的问题是你想要完成什么?&#39;。这只是反复打印&#39; 3&#39;一遍又一遍,因为你永远不会改变参数。 (如果您想从线程外部执行此操作,则需要使用threads::shared
)。