Perl ithreads: делай математику вместо сна - PullRequest
1 голос
/ 16 сентября 2010

Я использую perl ithreads и все работает нормально, если я не решу, что потоки спят.

Допустим, моя подпрограмма thread_job передается как запись для нескольких потоков, которые должны запускаться одновременно.

thread_job()
{
...
sleep 2;

#do other stuff here

}

Если я не сплю, у меня нет проблем с запущенными потоками, и они отлично справляются со своими задачами.Если я добавлю сон, мой скрипт зависнет.Я запускаю это из командной строки Windows, если это помогает.

Так как мне действительно нужно спать, и я предполагаю, что есть проблема с использованием этого сна в моей текущей установке, я намерен заставить поток делать что-то некоторое время вместо сна.Есть ли такая математическая операция, которую я мог бы выполнить?

Ответы [ 2 ]

2 голосов
/ 16 сентября 2010

Попробуйте использовать Win32 :: Sleep . (Обратите внимание, что в качестве аргумента требуется миллисекунды , а не секунды)

1 голос
/ 27 июня 2012

Вызов sleep() блокирует весь процесс (то есть все потоки).

Вместо этого вы можете заблокировать один поток, вызвав select().Сделайте что-то вроде этого:

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