Вопрос по многопоточности. Запуск потока после сбора нужных данных



  • Решение проблемы = 300 рублей, пойдет?



  • @Krotiki Общая схема такова :) Создай глобальную переменную можно числовую. Поток после того как закончит парсинг увеличивает ее на 1. А остальные потоки ждут. Например сделай цикл while (true) в нем проверка если переменная меньше, чем надо то спим к примеру 10 сек, а если все ок то делаем break и идем дальше работать с данными.



  • @Krotiki Вот схематичный пример0_1520263584366_exempl.xml



  • @Denis_krsk Не работает. Сделал все как в схеме, все равно ошибка. Плюс у меня 1 поток - 1 функция, я использовал определения номера потока через "==", а не больше/меньше, правда наврядли из-за этого

    ![alt text](0_1520265141764_2018-03-05_18-49-16.png image url)



  • но это же все разжовано



  • @Krotiki А данные парсер сохраняет в глобальные переменные? Я бы вообще ресурсы использовал



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



  • @ruzne Вам по письму и изложению еще долго до адекватности. Каждый мастер в своем деле.

    Если кто-то готов помочь, напишите, я заплачу сколько потребуется, но мне нужно именно решение.



  • @Krotiki said in Вопрос по многопоточности. Запуск потока после сбора нужных данных:

    @ruzne Вам по письму и изложению еще долго до адекватности. Каждый мастер в своем деле.

    Если кто-то готов помочь, напишите, я заплачу сколько потребуется, но мне нужно именно решение.

    дак какой вопрос и такой.
    в чем проблема, какие выдает ошибки, пример не работающего скрипта.



  • @Krotiki У меня сейчас нет времени накидать скрипт именно по вашему вопросу, но такие вещи делаются успешно, и у меня есть пример скрипта для подобных ситуаций. Прямо вашу проблему он не решает, но точно демонстрирует пути решения.

    Мой пост в англоязычной части форума: http://community.bablosoft.com/topic/3776/calling-different-function-in-threads/14# В нем скрипт.

    Если нужно доп демо или сделать работу - пишите в личку.



  • @ruzne вроде он из списка берется же данные а глобальный список не возможно сделать ну может и можно через JS



  • @Krotiki said in Вопрос по многопоточности. Запуск потока после сбора нужных данных:

    @Denis_krsk Не работает. Сделал все как в схеме, все равно ошибка. Плюс у меня 1 поток - 1 функция, я использовал определения номера потока через "==", а не больше/меньше, правда наврядли из-за этого

    ![alt text](0_1520265141764_2018-03-05_18-49-16.png image url)

    тебе советую использовать ресурсы для этой цели



  • @GamiD said in Вопрос по многопоточности. Запуск потока после сбора нужных данных:

    @ruzne вроде он из списка берется же данные а глобальный список не возможно сделать ну может и можно через JS

    почему?
    создать список
    наполнить список
    создать глобальную переменную
    ->сюда
    присвоить глобальной переменной список
    при каждом изменении списка ->туда



  • @ruzne, если точнее, то ещё
    -читать глобальную переменную со списком в локальную
    -изменять список
    -сохранять локальный список в глобальную переменную

    При этом не прерывать блокировку глобальной переменной асинхронными действиями, такими как вывод чего либо в лог.



  • @Antonio said in Вопрос по многопоточности. Запуск потока после сбора нужных данных:

    @ruzne, если точнее, то ещё
    -читать глобальную переменную со списком в локальную
    -изменять список
    -сохранять локальный список в глобальную переменную

    При этом не прерывать блокировку глобальной переменной асинхронными действиями, такими как вывод чего либо в лог.

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



  • Спасибо за ответы. По ресурсам:

    • Даже если я запишу все в ресурсы, как потом доставать из ресурса нужное значение? Все значения, которые у меня есть я выбираю посредством их имени в переменной, а в ресурсе это будет список и индентификация только по порядку возможна, верно? Скорее всего ресурсы не подойдут
    • Получается надо сделать глобальными переменными, но тогда вопросы:
      • "[[SAVE_ANSWER_1]] = answer;" - это сохраняется по коду данные answer в переменную SAVE_ANSWER_1, как ее глобальной в коде сделать в данном коде?
      • Здесь как сделать "ANSWER_BACK_1" глобальной? 0_1520335423437_upload-df0e274d-f49f-431f-adfd-1e3c1e4143a0




  • @Krotiki said in Вопрос по многопоточности. Запуск потока после сбора нужных данных:

    Здесь как сделать "ANSWER_BACK_1" глобальной?

    Попробуйте в OnApplicationStart инициализировать глобальную переменную. И в коде этой глобальной переменной присвоить значение локальной переменной ANSWER_BACK_1. Дальше глобальная переменная будет как посредник между глобальной и локальной областью. Когда нужно считываем с нее значение в локалку, когда нужно пишем в нее с локалки в глобалку.


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.