Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: PCNTL
 
 автор: svk1be   (06.02.2008 в 16:28)   письмо автору
 
 

Здраствуйте,

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

У меня есть скриптик который "форкает" процессы создавая дочерние, которые работают определенное время и возвращают на екран некоторые данные в зависимости от результатов, а в это время скрипт продолжает выполняться.. Возможно ли сделать так, что бы скрипт ждал пока завершаться все дочерние процесы и продолжил свое выполнение.

Я имею ввиду следующий пример:

<?php

require("../include/functions.php");

echo 
"Hello,";

while (
something isn't reached){
  $pid = pcntl_fork ();
 
  if ($pid== -1) {
      die ("ERROR\n");
      }elseif ($pid){
      $var= function ();
         echo $var;
         endif;
         }
   }

echo "World";

?>


допустим выполнение функции function может занимать от мили секунды до пол минуты, и мне надо что бы скрипт вывел сначала "Hello," потом по завершении всех дочерних процессов вывел "World". Сейчас он выводит "Hello, World" а потом уже результаты процессов, или же сначала "Hello," потом результат части процессов, которые сработали быстро , потом "World", а потом результат остальных процессов.

Как же сделать, что бы все было по-порядку? :-/

Сразу говорю, что простой цыкл мне не подходит, надо именно дочерними процессами..

Большое спасибо за помощь

   
 
 автор: svk1be   (06.02.2008 в 21:03)   письмо автору
 
   для: svk1be   (06.02.2008 в 16:28)
 

Так есть у кого то какие то идеи? Пожалуйста!! Очень срочно.. :(
Спасибо за ранее..

   
 
 автор: vitali   (07.02.2008 в 09:48)   письмо автору
 
   для: svk1be   (06.02.2008 в 21:03)
 

В начале скрипта "сними" время $t1, затем перед выдачей "word" зафиксируй время на этот момент $t2 проверь разницу $t2-$t1 > 30 сек выдавай "word" иначе "спи" (30 - ($t2-$t1)) и т.д.

   
 
 автор: svk1be   (07.02.2008 в 14:30)   письмо автору
 
   для: vitali   (07.02.2008 в 09:48)
 

Ну во первых, это не професионально, во вторых дочерние процесы которые запускаються в моем скрипте выполняют сооединение со сторонними серверами, что влияет на разное время их полной отработки. То есть каждый из процессов может занять от 1 сек до 30 сек. Поскольку их около сотни, разница ощутима. По максимуму брать - глупо. Я наслышан, что существуют функции типа pcntl_wait и pcntl_waitpid, но сколько не читал, не могу понять как их правильно использовать.. Помогите, плиз.

Спасибо

   
 
 автор: svk1be   (09.02.2008 в 22:45)   письмо автору
 
   для: svk1be   (07.02.2008 в 14:30)
 

У кого то есть еще какие то идеи ?

Спасибо

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования