如何获取已加入的线程的输出。
我正在编写一个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";
答案 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
更复杂的数据结构。
当然,真正的答案是 - 在您加入时捕获线程的输出,并将其存储在某处。就像在您的模块中,或者在您执行实际加入呼叫的任何地方。