我是新來的Perl和嘗試多線程。我期待以下程序創建所有線程,並至少在5秒後打印「創建所有線程」,一旦執行並且所有線程等待輸入值。Perl中的多線程程序在窗口上給出意外的結果
use threads;
my @arr = (1,2,3,4);
foreach (@arr) {
sleep(1);
print "\ncreating...\n";
threads->new(\&echo, $_);
print "\ncreated\n";
}
print "\ncreated all the threads\n";
sleep(200); #wait for the threads to finish
sub echo {
my ($thread) = @_;
print "\nthread($thread) Enter the value:\n";
my $value = <>;
print "\nthread($thread) Got value= $value\n";
}
但我得到以下outout:
creating...
created
thread(1) Enter the value:
creating...
似乎其他3個線程尚未創建的,如果我刪除了睡眠(1)我得到有時預期的結果,但與睡眠(1)涉及,甚至等待幾分鐘,我得到了上述結果。我可能錯過了什麼?我認爲這是基本的,但我無法弄清楚。
UPDATE:
同樣的程序在Linux上工作完美無瑕,這可能是針對Windows平臺的具體問題?
UPDATE2:
在同一行以下Java程序的工作就好在同一個盒子:
import java.io.IOException;
public class MT {
public static void main(String[] args)throws Exception {
for(int i=0;i<4;i++){
Thread.sleep(2000);
new Thread(new Task(i)).start();
}
System.out.println("created all the threads");
Thread.sleep(20000);
}
static class Task implements Runnable{
int i;
public Task(int i) {
super();
this.i = i;
}
@Override
public void run() {
try {
System.out.println("Thread:"+i+" Enter value");
int x= System.in.read();
System.out.println(x);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
我不知道怎麼的perl上支持多線程的窗口!
有趣。你的代碼適用於我(Linux上的V5.12.4)。你在運行什麼操作系統? –
同樣在這裏:FreeBSD 8.3上的Perl 5.14.2,它就像一個魅力。然後同樣的問題:你在什麼操作系統?一些Windows? – Ouki
這是Deja Vu,很多時候當我問一些關於perl問題的問題時,第一個評論是'它在我的Linux機器上運行,您使用的是什麼操作系統?' :),我假設perl是平臺獨立的。無論如何,我在Windows 2008框中運行此草莓perl 5,版本16,Subversion 0(v5.16.0)爲MSWin32-x86-多線程構建。確實是 – Sushant