LINUX.ORG.RU

[perl]Потоки

 


0

1

Есть скрипт:

use threads;

sub mon {
       for(;;){
       ....
       sleep 60;
       }
}

$| = 1;
my $th= threads->create(\&mon)->join();
print "Next...\n";
....

Идея такова: При запуске скрипта функция мониторит некое состояние, и если там что-то не так, вызывает die, если же все ок, то идет дальше по кругу. Проблема в том, что после join() для потока, код который идет после, не выполняется, а ждет завершения, как Я понял, а нужно что бы все шло далее, в то же время поток делал свое дело и не останавливался. Где Я ошибся ?

★★★★★

>нужно что бы все шло далее

perl потоки не знаю, но по аналогии с pthreads проблема в join()

hizel ★★★★★
()
Ответ на: комментарий от hizel

Хм, а какие с ней могут быть проблемы ? Если её не вызвать, поток не будет работать, а вызывается она без параметров. Пробовал и отдельно создать поток, и отдельно вызвать join(), все так же.

joy4eg ★★★★★
() автор топика
Ответ на: комментарий от joy4eg

попробуйте таки раскурить документацию.

join waits for a thread to end and returns any values the thread exited with.

hizel ★★★★★
()

Лучше использовать форки. Это позволит и выполнять код дальше, пока чайлд выполняет какую-то задачу, и, в случае перла, лучше, чем потоки.

iSage ★★★★
()

threads->create(\&mon)->start();

// Перл не знаю.

baverman ★★★
()
Ответ на: комментарий от joy4eg

Вроде как недавно обсуждали, что на каждый поток в перл запускается процесс интерпретатора.
Но это не важно. Разберись, блин, с потоками. Поток у тебя завершается, потомучто джоин какраз ждёт завершения потока и возвращает его результат. Значит тебе просто надо поток запустить без джоина. Что непонятно? Или лень маны почитать?

Bad_ptr ★★★★★
()
Ответ на: комментарий от Bad_ptr

Все в порядке, проблема уже решена, используя fork(), касательно документации и join() так уже сказали, но все равно благодарю за ответ :)

joy4eg ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.