Субпанель отображает окно Window.vi или Window.Reentrun.vi. Выбирается кнопкой.
С Window.vi проблем нет. Получил ссылку на окно путем, описанным на втором скриншоте.
С Window.Reentrun.vi все сложней. Как узнать имя клона?
Можно конечно создать в родителе очередь, чтобы потом потомок после запуска отправлял ссылку на себя в эту очередь, но я так не хочу. Придется постоянно в каждом потомке создавать одинаковый набор действий, отправляя родителю эту ссылку.
Как родителю узнать имя клона потомка?
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Как родителю узнать имя клона потомка?
не совсем понял вопрос.="Usss" писал(а):С Window.Reentrun.vi все сложней. Как узнать имя клона?
Нужно узнать имя клона, или того, кто в subPanel?
второе делается так:
Тоже не вижу проблем. В потомке НЕ нужно создать ОДИНАКОВЫЙ набор действий: на то он и потомок, чтобы вызвать родительский метод, созданный один раз.чтобы потом потомок после запуска отправлял ссылку на себя в эту очередь, но я так не хочу. Придется постоянно в каждом потомке создавать одинаковый набор действий, отправляя родителю эту ссылку.
Если я неверно понял вопрос, то стоит его переформулировать
- Juri
- I/O
- Сообщения: 263
- Зарегистрирован: 19 апр 2017, 23:06
- Версия LabVIEW: 2021
- Благодарил (а): 13 раз
- Поблагодарили: 6 раз
Re: Как родителю узнать имя клона потомка?
Чуть модифицировал Launch.vi из проекта выше.
В нижнем левом углу Open VI Reference получает ссылку на Window.vi потомка. Если такой vi в потомке не существует, то происходит ошибка. В таком случае предполагается, что в потомке должна существовать Window.Reentrun.vi. Разница между ними в том, что Window.vi настроена на вызов в режиме Non-reentant Execution, а Window.Reentrun.vi в режиме Shared clone reentant execution. Смысл в том, что я создаю отдельную подпрограмму Window.vi, чтобы не загромождать кодом исходную программу-матку , в этом случае я не предполагаю вызывать параллельно эту подпрограмму несколько раз. Однако есть случаи, когда мне надо создать несколько одинаковых окон, которые должны работать параллельно. В этом случае в дочернем классе я создаю не Window.vi а Window.Reentrun.vi. И мне надо как-то получить vi reference на клона, чтобы вставить его в суб панель или чтобы открыть в процессе исполнения в отдельном окне. В случае с Window.vi проблем не возникает, vi reference получаю уже описанным выше способом. Но если в классе потомке надо загрузить рэференс на клон Window.Reentrun.vi то в таком случае приходится поместить в Window.Reentrun.vi потомка код, который отправляет родителю vi reference самого себя. Так вот я надеялся, что в Window.Reentrun.vi можно было бы вообще не вставлять никакого дополнительного кода, но не понимаю как этого добиться.
В нижнем левом углу Open VI Reference получает ссылку на Window.vi потомка. Если такой vi в потомке не существует, то происходит ошибка. В таком случае предполагается, что в потомке должна существовать Window.Reentrun.vi. Разница между ними в том, что Window.vi настроена на вызов в режиме Non-reentant Execution, а Window.Reentrun.vi в режиме Shared clone reentant execution. Смысл в том, что я создаю отдельную подпрограмму Window.vi, чтобы не загромождать кодом исходную программу-матку , в этом случае я не предполагаю вызывать параллельно эту подпрограмму несколько раз. Однако есть случаи, когда мне надо создать несколько одинаковых окон, которые должны работать параллельно. В этом случае в дочернем классе я создаю не Window.vi а Window.Reentrun.vi. И мне надо как-то получить vi reference на клона, чтобы вставить его в суб панель или чтобы открыть в процессе исполнения в отдельном окне. В случае с Window.vi проблем не возникает, vi reference получаю уже описанным выше способом. Но если в классе потомке надо загрузить рэференс на клон Window.Reentrun.vi то в таком случае приходится поместить в Window.Reentrun.vi потомка код, который отправляет родителю vi reference самого себя. Так вот я надеялся, что в Window.Reentrun.vi можно было бы вообще не вставлять никакого дополнительного кода, но не понимаю как этого добиться.
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Как родителю узнать имя клона потомка?
Что-то я не могу понять, что вы пытаетесь сделать, вероятно, потому что вы решили усложнить себе жизнь.
Если у потомка Window.Reentrun.vi является аналогом Window.vi, то почему они имеют разные имена?
Конечно, в этом случае у них должны быть одинаковые настройки клонирования.
Если у потомка Window.Reentrun.vi является аналогом Window.vi, то почему они имеют разные имена?
Конечно, в этом случае у них должны быть одинаковые настройки клонирования.
Это не мешает задать клонируемоость. Ну будет у вас один клон, но жизнь вы себе сильно упростите.в этом случае я не предполагаю вызывать параллельно эту подпрограмму несколько раз