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