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

Dp76

Client
Joined
Jan 24, 2019
Messages
104
Reaction score
16
Points
18
Допустим у меня работает ZP в 100 потоков, все они пишут в одни лог, который отображается в самом ZP.

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

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

ibred

Client
Joined
Apr 4, 2015
Messages
3,835
Reaction score
3,564
Points
113
C#:
return Thread.CurrentThread.ManagedThreadId.ToString();
 

luk911

Client
Joined
Jan 17, 2013
Messages
1,542
Reaction score
581
Points
113
C#:
return Thread.CurrentThread.ManagedThreadId.ToString();
всегда 1 в постере выводит, а можно как то PID узнать ? и номер порта кажется.
 
  • Thank you
Reactions: lx2003

LaGir

Client
Joined
Oct 1, 2015
Messages
256
Reaction score
1,058
Points
93
C#:
// Сохраняем PID в переменную проекта "PID"
project.Variables["PID"].Value = Regex.Match(instance.FormTitle, @"(?<=id:).+?(?=\))").Value;
// Сохраняем порт  в переменную проекта "InstancePort"
project.Variables["InstancePort"].Value = instance.Port.ToString();
 

Moonwalker

Client
Joined
Mar 16, 2016
Messages
1,944
Reaction score
1,637
Points
113
C#:
return instance.FormTitle;
 
  • Thank you
Reactions: lx2003

lx2003

Client
Joined
Feb 15, 2021
Messages
819
Reaction score
158
Points
43
А как-то по этим параметрам можно "найти и обратиться" к необходимому потоку, чтобы в нем что-то сделать, например, получить значение переменной?
Или обращаться надо из самого шаблона, поток которого запущен?
А как тогда обратиться из того же шаблона в другой поток этого шаблона?
И вообще, бывает, что глобальные переменные из одного шаблона как-то можно получить из другого шаблона? Может быть по имени шаблона, PID, port инстанса?

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


Вот нашел что-то хорошее:
 
Last edited:

lx2003

Client
Joined
Feb 15, 2021
Messages
819
Reaction score
158
Points
43
А как-то по этим параметрам можно "найти и обратиться" к необходимому потоку, чтобы в нем что-то сделать, например, получить значение переменной?
Или обращаться надо из самого шаблона, поток которого запущен?
А как тогда обратиться из того же шаблона в другой поток этого шаблона?
И вообще, бывает, что глобальные переменные из одного шаблона как-то можно получить из другого шаблона? Может быть по имени шаблона, PID, port инстанса?

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


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

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

LaGir

Client
Joined
Oct 1, 2015
Messages
256
Reaction score
1,058
Points
93
А как-то по этим параметрам можно "найти и обратиться" к необходимому потоку, чтобы в нем что-то сделать, например, получить значение переменной?
Или обращаться надо из самого шаблона, поток которого запущен?
А как тогда обратиться из того же шаблона в другой поток этого шаблона?
Всё зависит от того, что именно хочется сделать. Если нужны какие-то переменные какого-то конкретного потока, то обычно проще всего хранить значения этих переменных во внешних местах, например в БД или просто в файлах. Например, если храним в БД, то нужный набор переменных-значений сохраняем/получаем по PID или порту инстанса, чтобы отличить их от аналогичных наборов от других потоков. Ну и разумеется предварительно создаём соответствующую структуру в БД или конкретной таблице БД.
И вообще, бывает, что глобальные переменные из одного шаблона как-то можно получить из другого шаблона? Может быть по имени шаблона, PID, port инстанса?
Глобальные переменные доступны только в рамках одного шаблона, т.е. только среди его потоков. Если прям очень нужно для иных шаблонов, опять же имеет смысл использовать любое внешнее хранилище информации (т.е. БД, файлы, что-то ещё).
Вроде так:
Это самописный класс, предназначенный только для быстрого доступа к ключевым объектам потока, для пользования в этом же самом отдельном потоке. Т.е. это явно не то, что может помочь в вопросах выше.
 
  • Thank you
Reactions: lx2003

lx2003

Client
Joined
Feb 15, 2021
Messages
819
Reaction score
158
Points
43
например в БД или просто в файлах
и вообще на виртуальном диске (RAM-drive)

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

Dmitriy Ka

Client
Joined
May 3, 2016
Messages
949
Reaction score
729
Points
93
Глобальные переменные доступны только в рамках одного шаблона, т.е. только среди его потоков. Если прям очень нужно для иных шаблонов, опять же имеет смысл использовать любое внешнее хранилище информации (т.е. БД, файлы, что-то ещё).
Ошибаетесь, они разграничиваются Пространством имен.
Если в двух разных шаблонах будут одинаковые пространства имен, они будут друг друга видеть.

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

LaGir

Client
Joined
Oct 1, 2015
Messages
256
Reaction score
1,058
Points
93
Ошибаетесь, они разграничиваются Пространством имен.
Если в двух разных шаблонах будут одинаковые пространства имен, они будут друг друга видеть.
О, не знал, спасибо. Пользовался последний раз ими примерно когда познакомился с ZP, видать криво отложились в памяти их особенности.
 

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)