Несколько функции - в разные потоки



  • Ребят, подскажите плиз, хочу организовать несколько функции в разные потоки. То есть, у меня есть 3 функции , хочу чтобы при запуске скрипта запускались (одновременно?) :

    1 функция - в первый поток
    2 функция - второй поток,
    3 функция - в третий поток

    Как можно реализовать?)



  • @ogurchiki said in Несколько функции - в разные потоки:

    Ребят, подскажите плиз, хочу организовать несколько функции в разные потоки. То есть, у меня есть 3 функции , хочу чтобы при запуске скрипта запускались (одновременно?) :

    1 функция - в первый поток
    2 функция - второй поток,
    3 функция - в третий поток

    Как можно реализовать?)

    Через if и действие Номер потока, вот пример:

    //в начале скрипта применяем действие Номер потока, после этого нам будет доступна переменная [[THREAD_INDEX]]
    
    if [[THREAD_INDEX]] == 1:
        вызов func1()
    
    if [[THREAD_INDEX]] == 2:
        вызов func2()
    
    if [[THREAD_INDEX]] == 3:
        вызов func3()
    


  • @santilo биг сенк)



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



  • @IvanG said in Несколько функции - в разные потоки:

    туплю наверно, но никак не могу понять как несколько условий if одновременно обработать. может кто скрипт простой набросать чтоб две разные функции одновременно в двух потоках параллельно запустились?

    Так вам же уже написали
    вначале потока ставим

    определить номер потока THREAD_INDEX

    потом условие, если THREAD_INDEX равно 1 (то есть это первый поток) выполняем функцию №1
    if [[THREAD_INDEX]] == 1:
    вызов func1()

    далее, если THREAD_INDEX равно 2 (то есть это второй поток) выполняем функцию №2
    if [[THREAD_INDEX]] == 2:
    вызов func2()

    далее если THREAD_INDEX равно 3 (то есть это третий поток) выполняем функцию №3
    if [[THREAD_INDEX]] == 3:
    вызов func3()

    Итого каждый поток будет выполнять только свой № функции, в другом потоке скрипт к ней тупо не перейдет.



  • @Samael_96 все понял теперь, спасибо!



  • Вопрос насколько можно полагаться на номер потока?
    Вероятно имел ошибку из за использования номера потока, но не уверен. Пошел другим путем. Решая я туже задачу и стремясь избавиться от зависимости от номера потока придумываю через использование ресурса.
    Задача та же: есть несколько функций которые должны выполняться параллельно, время выполнение каждой из низ может быть любым угодно, после завершении работы функции ее нужно запустить вновь и не допустить запуска более одного экземпляра одной и той же функции.
    Решение: в OnApplicationStart создам ресурс stream и заполним его индексами оп количеству функций. В Main получим ресурс(одноразово) и используем его вместо номера потока как в примере выше. ВАЖНО: внутри блока if возвращаем/добавляем элемент в ресурс чтобы работало. Запускаем то число потоков.
    Вероятно рабочий пример.
    0_1519110464847_stream.xml
    Возможно существуют другие способы, не могу придумать.

    Будет и вопрос: что за параметры при создании ресурса?



  • @ruzne, нет, это гемор какой-то. Все должно быть нормально через номера потоков. Тем более, что функции нужно по кругу гонять. Не завершай поток после выполнения функции, а по метке в начало функции переводи и точно потоки будут одни и теже работать.



  • Столкнулся с такой же проблемой. Есть два потока и две функции, определяю номер потока и в зависимости от номера выполняю функцию, а по факту в обоих потоках выполняется вторая функция, пробую переопределить первую функцию, после чего ситуация меняется на обратную, в обоих потоках выполняется первая функция. Подскажите в чем может быть проблема? Ранее уже реализовывал подобное, даже посложней, проблем не было.



  • @kosta без скрипта сложно понять, что не так...



  • Нашел причину моей проблемы, дело было в метках, для разных потоков я использовал одинаковые названия меток. Вот пример кода с проблемой 0_1555870482647_ex.xml , если запустить в многопотоке, то должно загрузиться в первом потоке ya.ru, а во втором google.com, а из-за метки в обоих потоках загружается ya.ru Отсюда вопрос, может кто нибудь пояснить как работают метки в многопотоке, а то я чет не догоняю, по моему мнению метки как и переменные в разных потоках, работают в рамках потока и не оказывают влияние на другие, или я не прав?



  • @kosta said in Несколько функции - в разные потоки:

    Нашел причину моей проблемы, дело было в метках, для разных потоков я использовал одинаковые названия меток. Вот пример кода с проблемой 0_1555870482647_ex.xml , если запустить в многопотоке, то должно загрузиться в первом потоке ya.ru, а во втором google.com, а из-за метки в обоих потоках загружается ya.ru Отсюда вопрос, может кто нибудь пояснить как работают метки в многопотоке, а то я чет не догоняю, по моему мнению метки как и переменные в разных потоках, работают в рамках потока и не оказывают влияние на другие, или я не прав?

    Метки в принципе нельзя называть одинаково, если не вдаваться в подробности, интерпретатор ищет первую метку по названию в коде скрипта и переходит по ней.



  • @fox Спасибо за ответ, да, уже тоже понял, объявил две метки с одинаковым именем, соответственно получил результат, переброс к первой объявленной метки не зависимо от потока.


Log in to reply
 

  • 6
  • 4
  • 7
  • 6
  • 4
  • 7
  • 7
  • 3