Perl ithreads:做一些数学而不是睡觉

时间:2010-09-15 20:20:33

标签: multithreading perl sleep

我正在使用perl ithreads并且工作正常,除非我决定让线程睡眠。

让我们说我的例程thread_job作为几个线程的条目传递,以便开始并发运行。

thread_job()
{
...
sleep 2;

#do other stuff here

}

如果我没有睡觉,我对线程运行没有任何问题,他们完成任务。如果我添加一个睡眠,我的脚本会挂起。我正在Windows命令提示符下运行它,如果这有帮助。

因为我确实需要睡觉并且我猜测在我当前的设置中使用此睡眠存在问题,我打算让线程做一些事情,暂时而不是睡觉。我可以执行任何这样的数学运算吗?

2 个答案:

答案 0 :(得分:2)

请尝试使用Win32::Sleep。 (请注意,它需要毫秒作为参数,而不是秒。)

答案 1 :(得分:1)

调用sleep()会阻止整个过程(即所有线程)。

您可以通过调用select()来阻止单个线程。做这样的事情:

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