Почему зависает скрипт после окончания обработки foreach?



  • Есть кубик "Вызов функции в несколько потоков" в этой функции есть цикл Foreach.

    Проблема: В режиме Запуск скрипт зависает как только обработает все действия внутри этого Foreach цикла.

    Почему?

    В записи - норм всё, и код верен. Я проверил, зависает именно после того как закончит обрабатывать все элементы в цикле Foreach.
    2.xml
    Файл скрипта прикладываю.



  • @Nikolas said in Почему зависает скрипт после окончания обработки foreach?:

    Есть кубик "Вызов функции в несколько потоков" в этой функции есть цикл Foreach.

    Проблема: В режиме Запуск скрипт зависает как только обработает все действия внутри этого Foreach цикла.

    Почему?

    В записи - норм всё, и код верен. Я проверил, зависает именно после того как закончит обрабатывать все элементы в цикле Foreach.
    2.xml
    Файл скрипта прикладываю.

    Ошибка стара как мир.. Внимательно читайте описание действия

    d2945494-ba8a-4d32-b7e4-53e8761014cd-изображение.png

    Если хотите увидеть проблему в режиме "записи", то перезапустите скрипт и выполните только функцию "funk_mnogopotok"

    alt text



  • @Fox Я из Main переношу данные глобалками внутрь многопоточной функции.

    Это в Main задаю глобалки: й1.jpg

    Юзаю эти глобалки внутри многопоточной функции:
    й2.jpg



  • @Nikolas said in Почему зависает скрипт после окончания обработки foreach?:

    @Fox Я из Main переношу данные глобалками внутрь многопоточной функции.

    Это в Main задаю глобалки:

    Юзаю эти глобалки внутри многопоточной функции:

    Ну значит выполните действие "выполнить код" с кодом:

    _sa = function(id)
    {
        log(id)
        ScriptWorker.SetCurrentAction(id)
    }
    

    в функции funk_mnogopotok. Это позволит точно узнать какие действия вызывают зависание



  • @Nikolas Хотя скорее всего причина в том, что у вас кончаются данные и поток не выполняет ни какую работу и завершается сразу же, а так как повторений у вас указанно очень много, то это вызывает зависание. Если я прав, то действие "сон" в одну секунду в начале функции funk_mnogopotok решит проблему



  • @Fox

    Выполнил внутри функции в самом низу Ваш код, но определять не нужно по сути, потому что я вчера нашел где происходит краш. Я в теме сразу писал, что краш происходит как только Foreach цикл закончит обрабатывать самый последний foreach_data элемент в предложенным ему списке. [[POD_SPISOK_DLA_ODNOGO_POTOKA]] .

    Может краш происходит потому что кубик Foreach цикл - это самый последний элемент в функции и он не знает дальше как в Main выйти?)

    Вот что в логе после вашего кода:
    q3.jpg



  • @Fox отлично. помогло спасибо.
    поставил 1 успешное выполнение и поставил сон в 1 сек в начало многопоточной функции 1ф.jpg



  • @Nikolas код нужно располагать в начале функции, что бы в логе можно было увидеть id выполняемых действий. Это позволит точно узнать последовательность выполнения действий


Log in to reply