如何获取已加入的线程的输出

时间:2014-06-25 06:50:57

标签: multithreading perl

如何获取已加入的线程的输出。

我正在编写一个perl脚本,我在其中调用.pm文件中的multi_thread子例程来执行多线程操作,如create(),tid()和join(),并将线程对象返回给调用程序。

并在主脚本中我想得到线程sub1的输出。 但我遇到错误线程已加入 ...................

#!/usr/bin/perl
use strict;
use multithread;

sub sub1
{
 print "hello\n";
 return 1;
}

my @thread_obj=multi_thread(sub1);
my $res=$thread_obj[0]->join();
print "thread1 output : $res\n";

1 个答案:

答案 0 :(得分:0)

你做不到。联合线程是完整的,并且已与主程序“合并”。它不再存在。

或许做的是使用Thread::Queue并让你的线程将其排队 - 结果一直存在,直到程序存在。

E.g。

use Thread::Queue;
my $result_q = Thread::Queue -> new();

sub sub1
{
    print "hello\n";
    $result_q -> enqueue ( 1 ); 
    return 1;
}

然后,您可以使用dequeue或更可能dequeue_nb来处理结果队列,以完全排除它。但是,当与enqueue结合使用时,您可以Storable更复杂的数据结构。

当然,真正的答案是 - 在您加入时捕获线程的输出,并将其存储在某处。就像在您的模块中,或者在您执行实际加入呼叫的任何地方。