Зависание при работе нескольких потоков над разными заданиями
-
Структура шаблона такая (без OnApplicationStart):
Получить номер потока Если номер потока = 1 Функция 1 Пока правда Функция 2 Функция 3 Если номер потока > 1 Функция 4 Пока правда Функция 5
При такой структуре БАС проделывает Функции 1,2,3 и зависает вместо того, чтобы вернуться в начало вечного цикла для потока.
Если изменить одно из условий так, чтобы оно не выполнялось (то есть чтобы работал только первый поток, а остальные завершались сразу или чтобы работали все потоки кроме первого), все нормально.
По любому есть другие способы организации, но но нужно именно так - первый поток главный, он управляет данными, используемыми всеми другими потоками. Как я могу составить шаблон по другому, но придерживаясь этой архитектуры?
P.S Когда выполняется один поток, он не повторяет нужные функции в вечном цикле вечно, а завершается после какого-то количества повторов, постоянно разного. Это тоже странно и крайне нежелательно, так как шаблон должен работать в мое отсутствие.
-
@MAKAR Не совсем понятно что делают функции 2 и 3. Если может случится так, что они выполняются мгновенно, то скрипт попадет в бесконечный цикл и зависнет. Я всегда использую сон на 1 секунду перед началом нового цикла. Если функции будут ждать ресурс или ввода капчи, они тоже могут зависнуть, в остальных случаях БАС должен завершать поток по таймауту, если действие длится слишком долго.
Когда выполняется один поток, он не повторяет нужные функции в вечном цикле вечно, а завершается после какого-то количества повторов, постоянно разного. Это тоже странно и крайне нежелательно, так как шаблон должен работать в мое отсутствие.
Да, во время работы потока может произойти ошибка, тогда он перезапустится. Это нормально. Избежать перезапуска можно обернув код в действие Игнорировать ошибки. Можно позволить ему перезапуститься, но обработать эту ситуацию.
Ну и можно добавить логирование и смотреть в каком месте зависает.
Получить номер потока Если номер потока = 1 Функция 1 Пока правда лог ф2+ Функция 2 лог ф2- лог ф3+ Функция 3 лог ф3+ Если номер потока > 1 Функция 4 Пока правда лог ф5+ Функция 5 лог ф5- ``
-
Спасибо, все как всегда просто. Увеличил все паузы до 2 секунд, и работает нормально. А вчера сидел отлаживал 4 часа)