Уникальный идентификатор инстанса.

Hool

Client
Регистрация
27.03.2015
Сообщения
65
Благодарностей
6
Баллы
8
Хотелось бы иметь возможность получить уникальный идентификатор инстанса, по которому в дальнейшем можно было бы из другого процесса производить элементарные действия, которые сейчас доступны по порту инстанса.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Можно выпарсить из FormTitle

string x = instance.FormTitle;
return x;
 
  • Спасибо
Реакции: Hool

Hool

Client
Регистрация
27.03.2015
Сообщения
65
Благодарностей
6
Баллы
8
Протестировал эту функцию (выдает ответ "Instance (Port:166600991; Pid:64029)"), но коэффициент уникальности очень маленький, только около 20% случаев попадается уникальное значение в случае, если это окно уже не активно. В каждом из случаев, если ранее полученное число совпадало по "Port", оно же совпадало и по "Pid".

P.S. Тестировал с запуском 2-х проектов по 500 выполнение каждого, выделял уникальные значения каждого из них, а потом еще сравнивал друг с другом, и в том и в другом случае было очень много совпадений. Поэтому это идентификатор уникален только в момент времени x, что очень затрудняет работу с этими данными их другого потока/проекта.
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
786
Баллы
113
генерите свой айди (Guid.NewGuid().ToString();-)) и пишите его в общий список
перед выходом удаляйте из списка этот айди
 
  • Спасибо
Реакции: Eduard

Hool

Client
Регистрация
27.03.2015
Сообщения
65
Благодарностей
6
Баллы
8
А его можно как то в заголовок инстанса или еще куда добавить (куда-то, что исчезнет вместе с ним без специального действия, такого как удалить из списка/таблицы/файла)?

Чтобы можно было воспользоваться чем то вроде Emulator.IsWindowExists("сгенерированный айди");
 
Последнее редактирование:

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
в рамках работающих инстансов, FormTitle уникален, если инстанс не работает то зачем к нему обращаться?
 

Hool

Client
Регистрация
27.03.2015
Сообщения
65
Благодарностей
6
Баллы
8
Чтобы к нему можно было обращаться из другого инстанса. Другой инстанс может узнать, к примеру, действует ли он в данный момент, но этот ли он, или уже какой-то другой уже не может (во всяком случае такой возможности узнать не нашел).
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
может проще записывать рандомный id в список и проверять наличие там id?
 

Hool

Client
Регистрация
27.03.2015
Сообщения
65
Благодарностей
6
Баллы
8
Да, проще конечно, но где гарантии, что это значение удалится, например при окончании инстанса или BadEndе, бывает что они виснут, или сам их прерываешь/закрываешь Зенку полностью.
Если же найти какое-то место, куда бы его можно было бы записать непосредственно в инстанс, а потом проверить, а живое ли еще это значение, то вероятность ошибки была бы сведена до минимума.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Новое Да, проще конечно, но где гарантии, что это значение удалится, например при окончании инстанса или BadEndе, бывает что они виснут, или сам их прерываешь/закрываешь Зенку полностью.
Так пишите при старте шаблона, а не в конце
 

Hool

Client
Регистрация
27.03.2015
Сообщения
65
Благодарностей
6
Баллы
8
Так пишите при старте шаблона, а не в конце
Так как при старте шаблона записывать то, что он уже перестал работать? При старте разумно было бы записывать, что он начал работу, это и делается, чтобы по этим значениям из другого инстанса проверять.
 
Последнее редактирование:

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
В title инстанса добавить свои данные нельзя. Поставил таску, сделаем.
 
  • Спасибо
Реакции: Hool

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
786
Баллы
113
в тайтл инстанса добавить данные можно, я кидал либу на сайти ищите в моих сообщениях. только смысл какой в этом? искать хендлер окна по тайтлу? изврат еще тот.
правильней я считаю сразу добавить фичу AssertInstanceById(string id) где id бдует браться из каждого потока свой
 
  • Спасибо
Реакции: Sanekk и Hool

Hool

Client
Регистрация
27.03.2015
Сообщения
65
Благодарностей
6
Баллы
8
в тайтл инстанса добавить данные можно, я кидал либу на сайти ищите в моих сообщениях. только смысл какой в этом? искать хендлер окна по тайтлу? изврат еще тот.
правильней я считаю сразу добавить фичу AssertInstanceById(string id) где id бдует браться из каждого потока свой
Не уверен, то ли нашел, но на сервере написано, что срок хранения файла истек ((
Есть ли возможность еще раз либу выложить? Думаю, что она может быть очень полезна.
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
786
Баллы
113
вот для вас специально
https://dropmefiles.com/AkSdT
использовать так
сохраняем куда нибудь
var ft = instance.FormTitle
потом када нада проверяем наличие
return MyTools.AssertWindowByCaption(ft);
 
  • Спасибо
Реакции: Sanekk и Hool

Hool

Client
Регистрация
27.03.2015
Сообщения
65
Благодарностей
6
Баллы
8

Nick

Client
Регистрация
22.07.2014
Сообщения
1 963
Благодарностей
797
Баллы
113
А если в процессе несколько потоков, как получить ID потоков? Если ничего подобного даже TaskID генерится только в Зенке, а в PM нули одни.
Я так понял, ничего подобного нет, так что выдвигаю соответствующее предложение :D
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Цель какая в итоге? Зачем вам эти данные?
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 963
Благодарностей
797
Баллы
113
Нужно всё это для отладки, чтобы в логе сообщения предварялись ID потоков, а то многопоток сложно отлаживать. Муторно каждый раз генерить длиннющий GUID, он потом всё загромождает. Я пробовал project.GetHashCode() и this.GetHashCode() — они дают более короткие ID и вроде бы разные для разных потоков, но нет уверенности, что они действительно уникальные.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
и зачем это в логах (сгенерированное что-то, что уже никогда не повторится)
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 963
Благодарностей
797
Баллы
113
Чтобы в длинном файле лога, куда отписываются за неделю сотни процессов, быстро выделить все строки, относящиеся к конкретному потоку. Тут номера типа 1, 2, 3 не подойдут
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
если в потоке фигурирует аккаунт то он вполне подойдет для фильтра
как и подойдет рандомная строка, сгенеренная экшеном обычным.
 

up_lvl

Client
Регистрация
02.09.2014
Сообщения
130
Благодарностей
52
Баллы
28
Апаю тему. Необходима возможность обзывать окна инстанса и возможность грохнуть инстанс по этому названию из другого инстанса.

Далее, в версии 5.9.0.0 вроде как объявили возможность обзывать окно:

ZennoPoster 5.9.0.0 (19.08.2015)
[+] Добавлен метод instance.AddToTitle для добавления текста в заголовок окна инстанса.
Оно то хорошо наверное, да вот в методе ReleaseInstance нельзя убить инстанс по этому названию.
Ыыых, обозвать бы инстанс GUID'ом, грохнуть его если он залип, ????????, PROFIT

А так нам из "уников" только номер порта доступен, который совсем не уник.
Судите сами, в рамках одного шаблона при многопотоке port повторяются:

30 тасков в 15 потоков, результат get instance.Port:

1616085593
1616085593
363860818
1949975650
759507445
1629960785
363860818
1616085593
759507445
1629960785
363860818
1616085593
1629960785
363860818
1616085593
363860818
1616085593
363860818
1616085593
363860818
1421761997
343842783
1559375572
1513508409
1122094328
2023957999
1513508409
2023957999
1513508409
1513508409

Вывод: нет уникальности в названии инстанса и как следствие нет возможности грохнуть конкретный требуемый инстанс методом ReleaseInstance .
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
странно, пришлете пример как формируете список на почту [email protected] с ссылкой на эту тему
intanse.FormTitle содержит pid процесса, можно по нему убивать
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
786
Баллы
113
я так понял что не процесс нужно убить а инстанс, тоесть таск->инстанс.
Как вариант было бы неплохо чтобы у шаблона была настройка на таймаут для всех кубиков без исключения. Если время нахождения в любом кубике превышает этот таймаут, то вызывается исключение.
Так же глобальный таймаут отчетности инстанса о своем состоянии. Если инстанс долго молчит, то прибить его и вызвать такое исключение или хотябы информировать пользователя о мертвом инстансе.
 
Последнее редактирование:
  • Спасибо
Реакции: Sanekk

up_lvl

Client
Регистрация
02.09.2014
Сообщения
130
Благодарностей
52
Баллы
28
Да, убить нужно не процесс, а конкретный инстанс. Процесс же != инстанс? Или это одно и то же? Я уже запутался.

По поводу теста, уже отвечали же в этом топике, что там совсем не уникально всё http://zennolab.com/discussion/threads/unikalnyj-identifikator-instansa.20751/#post-136917

Доступа нет пока туда где тестил get instance.Port, но там 3 действия:
1. Кубик get instance.Port
2. Пауза 5 сек
3. Записать в файл - {-Project.Directory-}test.txt (дописать в файл, записать перенос строки в конец)

Запускать в многопоток.

Вобщем, хотелось бы иметь возможность уникализировать инстанс и манипулировать с ним (убивать например) по этому унику.
 

yreha

Client
Регистрация
19.11.2015
Сообщения
125
Благодарностей
3
Баллы
18
Подскажите пожалуйста в шапку окна инстанса можно добавить текст из переменной?
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 963
Благодарностей
797
Баллы
113
да! подробности не помню, гугли справку и форум
 

yreha

Client
Регистрация
19.11.2015
Сообщения
125
Благодарностей
3
Баллы
18
Может ктото подскажет ссылку а то и форум и справку гуглил ничего не нашел
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
instance.AddToTitle("Привет");
 

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