Как сделать перезапуск потока по Таймеру через условие if

Поддержка
  • Приветствую!
    Помогите решить вопрос, ситуация следующая:
    Во время выполнения скрипта в многопотке, один или несколько потоков зависает на каком то действие, и будет висеть пока не перезапустишь скрипт.

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

  • Если поток завис, то никакие переменные вам не помогут.
    Если у вас просто цикл работает бесконечно - делайте проверку на cicle_index и выход из цикла.
    Если выход из цикла нужен по времени, то перед циклом запоминаете в переменной дату старта работы.
    Потом на каждой итерации цикла сравниваете с датой старта и с датой текущего времени.

  • @Ajshma он зависает на определённом действии из цикла, по какой то причине (рандомно) либо пропускает действие либо на фантомные элементы реагирует и зависает на действии, то есть поток работает, но зациклен на определое (ненужное действие), именно поэтому необходима проверка на переменые, указанные в описании, а ставить в данном случае таймер на цикл не актуально, так как не известно в какой промежуток времени это произойдёт, большой разброс, может через 10 минут встать, а может и 4 часа отработать

  • @ABrosko это костыль. Лучше сконцентрировать внимание на решении причины, а не следствия - понять что вызывает это зависание и переделать логику.
    То, что вы описываете(случайно пропускает действие, фантомные элементы) говорит о низкокачественных программировании и построении логики. Я сейчас мысль Вашу получше понял, но не понятно, что Вас в реализации смущает. Мой алгоритм, что я Выше написал - вполне подойдет и под вашу задачу - запоминаете дату старта и сравниваете с текущим временем.

  • @Ajshma Не могли бы подробней раскрыть алгоритм, не так давно знаком с БАС.
    В идеале, если это не займёт много времени, файлом. Буду весьма благодарен!

    А что касается решения причины, то безусловно согласен, но в данный момент не получается поймать этот нюанс в записи, что бы картина стала ясней, в моем случае, нахожусь в недоумении

  • @ABrosko Если только по всему скрипту запечатывать каждое действие в "Игнорировать ошибки" и внутри уже ставить таймер и потом "Перейти к метке" в самый конец скрипта.
    Тягомотина конечно. Если знать весь скрипт, можно придумать что-то более удобное.

  • Всех благодарю! Задачу решил, с таймером разобрался.