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

  • Автор темы Автор темы Hool
  • Дата начала Дата начала

Hool

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

string x = instance.FormTitle;
return x;
 
  • Спасибо
Реакции: Hool
Протестировал эту функцию (выдает ответ "Instance (Port:166600991; Pid:64029)"), но коэффициент уникальности очень маленький, только около 20% случаев попадается уникальное значение в случае, если это окно уже не активно. В каждом из случаев, если ранее полученное число совпадало по "Port", оно же совпадало и по "Pid".

P.S. Тестировал с запуском 2-х проектов по 500 выполнение каждого, выделял уникальные значения каждого из них, а потом еще сравнивал друг с другом, и в том и в другом случае было очень много совпадений. Поэтому это идентификатор уникален только в момент времени x, что очень затрудняет работу с этими данными их другого потока/проекта.
 
генерите свой айди (Guid.NewGuid().ToString();-)) и пишите его в общий список
перед выходом удаляйте из списка этот айди
 
  • Спасибо
Реакции: Eduard
А его можно как то в заголовок инстанса или еще куда добавить (куда-то, что исчезнет вместе с ним без специального действия, такого как удалить из списка/таблицы/файла)?

Чтобы можно было воспользоваться чем то вроде Emulator.IsWindowExists("сгенерированный айди");
 
Последнее редактирование:
в рамках работающих инстансов, FormTitle уникален, если инстанс не работает то зачем к нему обращаться?
 
Чтобы к нему можно было обращаться из другого инстанса. Другой инстанс может узнать, к примеру, действует ли он в данный момент, но этот ли он, или уже какой-то другой уже не может (во всяком случае такой возможности узнать не нашел).
 
может проще записывать рандомный id в список и проверять наличие там id?
 
Да, проще конечно, но где гарантии, что это значение удалится, например при окончании инстанса или BadEndе, бывает что они виснут, или сам их прерываешь/закрываешь Зенку полностью.
Если же найти какое-то место, куда бы его можно было бы записать непосредственно в инстанс, а потом проверить, а живое ли еще это значение, то вероятность ошибки была бы сведена до минимума.
 
Новое Да, проще конечно, но где гарантии, что это значение удалится, например при окончании инстанса или BadEndе, бывает что они виснут, или сам их прерываешь/закрываешь Зенку полностью.
Так пишите при старте шаблона, а не в конце
 
Так пишите при старте шаблона, а не в конце

Так как при старте шаблона записывать то, что он уже перестал работать? При старте разумно было бы записывать, что он начал работу, это и делается, чтобы по этим значениям из другого инстанса проверять.
 
Последнее редактирование:
В title инстанса добавить свои данные нельзя. Поставил таску, сделаем.
 
  • Спасибо
Реакции: Hool
в тайтл инстанса добавить данные можно, я кидал либу на сайти ищите в моих сообщениях. только смысл какой в этом? искать хендлер окна по тайтлу? изврат еще тот.
правильней я считаю сразу добавить фичу AssertInstanceById(string id) где id бдует браться из каждого потока свой
 
  • Спасибо
Реакции: Sanekk и Hool
в тайтл инстанса добавить данные можно, я кидал либу на сайти ищите в моих сообщениях. только смысл какой в этом? искать хендлер окна по тайтлу? изврат еще тот.
правильней я считаю сразу добавить фичу AssertInstanceById(string id) где id бдует браться из каждого потока свой
Не уверен, то ли нашел, но на сервере написано, что срок хранения файла истек ((
Есть ли возможность еще раз либу выложить? Думаю, что она может быть очень полезна.
 
вот для вас специально
https://dropmefiles.com/AkSdT
использовать так
сохраняем куда нибудь
var ft = instance.FormTitle
потом када нада проверяем наличие
return MyTools.AssertWindowByCaption(ft);
 
  • Спасибо
Реакции: Sanekk и Hool
А если в процессе несколько потоков, как получить ID потоков? Если ничего подобного даже TaskID генерится только в Зенке, а в PM нули одни.
Я так понял, ничего подобного нет, так что выдвигаю соответствующее предложение :-D
 
Цель какая в итоге? Зачем вам эти данные?
 
Нужно всё это для отладки, чтобы в логе сообщения предварялись ID потоков, а то многопоток сложно отлаживать. Муторно каждый раз генерить длиннющий GUID, он потом всё загромождает. Я пробовал project.GetHashCode() и this.GetHashCode() — они дают более короткие ID и вроде бы разные для разных потоков, но нет уверенности, что они действительно уникальные.
 
и зачем это в логах (сгенерированное что-то, что уже никогда не повторится)
 
Чтобы в длинном файле лога, куда отписываются за неделю сотни процессов, быстро выделить все строки, относящиеся к конкретному потоку. Тут номера типа 1, 2, 3 не подойдут
 
если в потоке фигурирует аккаунт то он вполне подойдет для фильтра
как и подойдет рандомная строка, сгенеренная экшеном обычным.
 
Апаю тему. Необходима возможность обзывать окна инстанса и возможность грохнуть инстанс по этому названию из другого инстанса.

Далее, в версии 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 .
 
странно, пришлете пример как формируете список на почту support@zennolab.com с ссылкой на эту тему
intanse.FormTitle содержит pid процесса, можно по нему убивать
 
я так понял что не процесс нужно убить а инстанс, тоесть таск->инстанс.
Как вариант было бы неплохо чтобы у шаблона была настройка на таймаут для всех кубиков без исключения. Если время нахождения в любом кубике превышает этот таймаут, то вызывается исключение.
Так же глобальный таймаут отчетности инстанса о своем состоянии. Если инстанс долго молчит, то прибить его и вызвать такое исключение или хотябы информировать пользователя о мертвом инстансе.
 
Последнее редактирование:
  • Спасибо
Реакции: Sanekk
Да, убить нужно не процесс, а конкретный инстанс. Процесс же != инстанс? Или это одно и то же? Я уже запутался.

По поводу теста, уже отвечали же в этом топике, что там совсем не уникально всё 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 (дописать в файл, записать перенос строки в конец)

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

Вобщем, хотелось бы иметь возможность уникализировать инстанс и манипулировать с ним (убивать например) по этому унику.
 
Подскажите пожалуйста в шапку окна инстанса можно добавить текст из переменной?
 
да! подробности не помню, гугли справку и форум
 
Может ктото подскажет ссылку а то и форум и справку гуглил ничего не нашел
 
instance.AddToTitle("Привет");
 

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