Добавил еще ведущие нули к миллисекундам, если кому-то еще когда-то этот код понадобится
log = function (text, color, define){ var id, time, thread, logHtml, textLog; define = (typeof define == 'string') ? define.split(/[\s,.|:;]+/g) : define; if(typeof define === 'object' && define !== null){ if(Array.isArray(define)){ id = define.indexOf('id') > -1; time = define.indexOf('time') > -1; thread = define.indexOf('thread') > -1; } else{ id = define.id == true; time = define.time == true; thread = define.thread == true; } } else id = time = thread = true; id = id ? '<a href="action://action' + ScriptWorker.GetCurrentAction() + '" style="color:gray;">[' + ScriptWorker.GetCurrentAction() + ']</a>' : ''; time = time ? ' ' + getTime() : ''; thread = thread ? ' Поток №' + thread_number() : ''; logHtml = (id || time || thread) ? id + '<span style="color: white">' + time + thread + ' : </span>' : ''; logHtml += '<span style="color:' + (color ? color : 'white') + '">' + text + '</span>'; textLog = '[' + ScriptWorker.GetCurrentAction() + ']' + time + thread + ' : ' + text function getTime(){ var checkTime = function(i){ return (i < 10) ? "0" + i : i; }; var checkMilliSeconds = function(ms){ if (ms < 10) { return "00" + ms; } else if (ms < 100) { return "0" + ms; } else { return ms; } }; var d = new Date(); var hh = checkTime(d.getHours()); var mm = checkTime(d.getMinutes()); var ss = checkTime(d.getSeconds()); var ms = checkMilliSeconds(d.getMilliseconds()); return '[' + hh + ':' + mm + ':' + ss + '.' + ms + ']'; }; Logger.WriteHtml(logHtml, textLog); }Несколько функции - в разные потоки
-
Ребят, подскажите плиз, хочу организовать несколько функции в разные потоки. То есть, у меня есть 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() -
@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()Итого каждый поток будет выполнять только свой № функции, в другом потоке скрипт к ней тупо не перейдет.
-
Вопрос насколько можно полагаться на номер потока?
Вероятно имел ошибку из за использования номера потока, но не уверен. Пошел другим путем. Решая я туже задачу и стремясь избавиться от зависимости от номера потока придумываю через использование ресурса.
Задача та же: есть несколько функций которые должны выполняться параллельно, время выполнение каждой из низ может быть любым угодно, после завершении работы функции ее нужно запустить вновь и не допустить запуска более одного экземпляра одной и той же функции.
Решение: в OnApplicationStart создам ресурс stream и заполним его индексами оп количеству функций. В Main получим ресурс(одноразово) и используем его вместо номера потока как в примере выше. ВАЖНО: внутри блока if возвращаем/добавляем элемент в ресурс чтобы работало. Запускаем то число потоков.
Вероятно рабочий пример.
0_1519110464847_stream.xml
Возможно существуют другие способы, не могу придумать.Будет и вопрос: что за параметры при создании ресурса?
-
@ruzne, нет, это гемор какой-то. Все должно быть нормально через номера потоков. Тем более, что функции нужно по кругу гонять. Не завершай поток после выполнения функции, а по метке в начало функции переводи и точно потоки будут одни и теже работать.
-
Столкнулся с такой же проблемой. Есть два потока и две функции, определяю номер потока и в зависимости от номера выполняю функцию, а по факту в обоих потоках выполняется вторая функция, пробую переопределить первую функцию, после чего ситуация меняется на обратную, в обоих потоках выполняется первая функция. Подскажите в чем может быть проблема? Ранее уже реализовывал подобное, даже посложней, проблем не было.
-
Нашел причину моей проблемы, дело было в метках, для разных потоков я использовал одинаковые названия меток. Вот пример кода с проблемой 0_1555870482647_ex.xml , если запустить в многопотоке, то должно загрузиться в первом потоке ya.ru, а во втором google.com, а из-за метки в обоих потоках загружается ya.ru Отсюда вопрос, может кто нибудь пояснить как работают метки в многопотоке, а то я чет не догоняю, по моему мнению метки как и переменные в разных потоках, работают в рамках потока и не оказывают влияние на другие, или я не прав?
-
@kosta said in Несколько функции - в разные потоки:
Нашел причину моей проблемы, дело было в метках, для разных потоков я использовал одинаковые названия меток. Вот пример кода с проблемой 0_1555870482647_ex.xml , если запустить в многопотоке, то должно загрузиться в первом потоке ya.ru, а во втором google.com, а из-за метки в обоих потоках загружается ya.ru Отсюда вопрос, может кто нибудь пояснить как работают метки в многопотоке, а то я чет не догоняю, по моему мнению метки как и переменные в разных потоках, работают в рамках потока и не оказывают влияние на другие, или я не прав?
Метки в принципе нельзя называть одинаково, если не вдаваться в подробности, интерпретатор ищет первую метку по названию в коде скрипта и переходит по ней.
