Несколько функции - в разные потоки
-
Ребят, подскажите плиз, хочу организовать несколько функции в разные потоки. То есть, у меня есть 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 Спасибо за ответ, да, уже тоже понял, объявил две метки с одинаковым именем, соответственно получил результат, переброс к первой объявленной метки не зависимо от потока.