Вывести в лог ID потока

Dp76

Client
Регистрация
24.01.2019
Сообщения
104
Благодарностей
16
Баллы
18
Допустим у меня работает ZP в 100 потоков, все они пишут в одни лог, который отображается в самом ZP.

Не могу найти, как в лог добавить номер или ID потока, или какой-то другой идентификатор, чтобы можно было понять, один и тот же поток шлет в лог ошибки или это разные потоки....

Извините, не нашел по поиску что-то вразумительное
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 560
Баллы
113
C#:
return Thread.CurrentThread.ManagedThreadId.ToString();
 

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
580
Баллы
113
  • Спасибо
Реакции: lx2003

LaGir

Client
Регистрация
01.10.2015
Сообщения
240
Благодарностей
972
Баллы
93
C#:
// Сохраняем PID в переменную проекта "PID"
project.Variables["PID"].Value = Regex.Match(instance.FormTitle, @"(?<=id:).+?(?=\))").Value;
// Сохраняем порт  в переменную проекта "InstancePort"
project.Variables["InstancePort"].Value = instance.Port.ToString();
 
  • Спасибо
Реакции: Moonwalker и lx2003

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 801
Благодарностей
1 397
Баллы
113
C#:
return instance.FormTitle;
 
  • Спасибо
Реакции: lx2003

lx2003

Client
Регистрация
15.02.2021
Сообщения
742
Благодарностей
150
Баллы
43
А как-то по этим параметрам можно "найти и обратиться" к необходимому потоку, чтобы в нем что-то сделать, например, получить значение переменной?
Или обращаться надо из самого шаблона, поток которого запущен?
А как тогда обратиться из того же шаблона в другой поток этого шаблона?
И вообще, бывает, что глобальные переменные из одного шаблона как-то можно получить из другого шаблона? Может быть по имени шаблона, PID, port инстанса?

И как-то можно каждому инстансу, который запустился давать имя, будто это отдельная задача?


Вот нашел что-то хорошее:
 
Последнее редактирование:

lx2003

Client
Регистрация
15.02.2021
Сообщения
742
Благодарностей
150
Баллы
43
А как-то по этим параметрам можно "найти и обратиться" к необходимому потоку, чтобы в нем что-то сделать, например, получить значение переменной?
Или обращаться надо из самого шаблона, поток которого запущен?
А как тогда обратиться из того же шаблона в другой поток этого шаблона?
И вообще, бывает, что глобальные переменные из одного шаблона как-то можно получить из другого шаблона? Может быть по имени шаблона, PID, port инстанса?

И как-то можно каждому инстансу, который запустился давать имя, будто это отдельная задача?


Вот нашел что-то хорошее:
Вроде так:

Объект текущего потока для доступа к настройкам и переменным:
// Объект текущего потока для доступа к настройкам и переменным
var ct = new CurrentThread(instance, project);
Нашел в этой статье
 

LaGir

Client
Регистрация
01.10.2015
Сообщения
240
Благодарностей
972
Баллы
93
А как-то по этим параметрам можно "найти и обратиться" к необходимому потоку, чтобы в нем что-то сделать, например, получить значение переменной?
Или обращаться надо из самого шаблона, поток которого запущен?
А как тогда обратиться из того же шаблона в другой поток этого шаблона?
Всё зависит от того, что именно хочется сделать. Если нужны какие-то переменные какого-то конкретного потока, то обычно проще всего хранить значения этих переменных во внешних местах, например в БД или просто в файлах. Например, если храним в БД, то нужный набор переменных-значений сохраняем/получаем по PID или порту инстанса, чтобы отличить их от аналогичных наборов от других потоков. Ну и разумеется предварительно создаём соответствующую структуру в БД или конкретной таблице БД.
И вообще, бывает, что глобальные переменные из одного шаблона как-то можно получить из другого шаблона? Может быть по имени шаблона, PID, port инстанса?
Глобальные переменные доступны только в рамках одного шаблона, т.е. только среди его потоков. Если прям очень нужно для иных шаблонов, опять же имеет смысл использовать любое внешнее хранилище информации (т.е. БД, файлы, что-то ещё).
Это самописный класс, предназначенный только для быстрого доступа к ключевым объектам потока, для пользования в этом же самом отдельном потоке. Т.е. это явно не то, что может помочь в вопросах выше.
 
  • Спасибо
Реакции: lx2003

lx2003

Client
Регистрация
15.02.2021
Сообщения
742
Благодарностей
150
Баллы
43
например в БД или просто в файлах
и вообще на виртуальном диске (RAM-drive)

Глобальные переменные доступны только в рамках одного шаблона, т.е. только среди его потоков. Если прям очень нужно для иных шаблонов, опять же имеет смысл использовать любое внешнее хранилище информации (т.е. БД, файлы, что-то ещё).
Попробую по имени шаблона и namespaces как-нибудь...
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
837
Благодарностей
582
Баллы
93
Глобальные переменные доступны только в рамках одного шаблона, т.е. только среди его потоков. Если прям очень нужно для иных шаблонов, опять же имеет смысл использовать любое внешнее хранилище информации (т.е. БД, файлы, что-то ещё).
Ошибаетесь, они разграничиваются Пространством имен.
Если в двух разных шаблонах будут одинаковые пространства имен, они будут друг друга видеть.

C#:
IGlobalVariable gv = project.GlobalVariables["MyNamespase", "VariableName"]; // MyNamespase - через него можем подключиться в другом шаблоне
 
  • Спасибо
Реакции: lx2003 и LaGir

LaGir

Client
Регистрация
01.10.2015
Сообщения
240
Благодарностей
972
Баллы
93
Ошибаетесь, они разграничиваются Пространством имен.
Если в двух разных шаблонах будут одинаковые пространства имен, они будут друг друга видеть.
О, не знал, спасибо. Пользовался последний раз ими примерно когда познакомился с ZP, видать криво отложились в памяти их особенности.
 
  • Спасибо
Реакции: lx2003 и Dmitriy Ka

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)