2010-09-15 51 views
1

我使用perl ithreads和事情工作正常,除非我決定讓線程睡覺。Perl ithreads:做一些數學而不是睡覺

可以說我的例程thread_job作爲一個條目傳遞給幾個線程以開始同時運行。

thread_job() 
{ 
... 
sleep 2; 

#do other stuff here 

} 

如果我沒有睡眠,我沒有問題與運行的線程,他們做他們的任務很好。如果我添加睡眠,我的腳本會掛起。如果有幫助,我正在使用Windows命令提示符運行此操作。

因爲我確實需要睡覺,我猜測在我當前的設置中使用這個睡眠有一個問題,我打算讓線程做一些事情,而不是睡覺。有沒有這樣的數學運算,我可以執行?

+1

你運行的是什麼版本的Perl?如果我記得,在老版本的Perl中,Windows的核心睡眠存在問題。 – Ether 2010-09-15 20:46:54

+0

這是我的: – wrecktangle 2010-09-15 21:49:51

+0

我的perl5(修訂版本5版本8顛覆8)配置摘要: – wrecktangle 2010-09-15 21:50:07

回答

2

嘗試使用Win32::Sleep代替。 (請注意,它需要毫秒作爲參數,而不是秒。)

+0

謝謝我會試試這個! – wrecktangle 2010-09-15 21:52:24

+0

嘿謝謝Win32 ::睡眠好多了! – wrecktangle 2010-09-15 22:30:45

+0

@ decafa5c11:在這種情況下,請隨時接受答案(點擊答案旁邊的複選標記)。 :) – Ether 2010-09-16 16:50:37

1

調用sleep()會阻塞整個進程(即所有線程)。

您可以通過調用select()來阻止單個線程。做這樣的事情:

thread_job() { 
... 
$delay = 2; 
select(undef, undef, undef, $delay); 
... 
}