@Alex84 Привет, так как нету репутации не смог ответить в лс, так что отвечу здесь
Афигеть, спасибо большое! Советы прям пушка, ответил на многое что меня интересовало) Спасибо еще раз за советы, буду дальше осваивать bas, таких людей как вы можно редко встретить)
Зависание при работе нескольких потоков над разными заданиями
-
Структура шаблона такая (без 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- ``