Рекурсивный запуск VI
-
Korotenko
- developer
- Сообщения: 286
- Зарегистрирован: 25 июл 2008, 10:43
- Награды: 1
- Версия LabVIEW: 2009
- Откуда: Россия, Владивосток
- Контактная информация:
Рекурсивный запуск VI
На днях писал прогу для обработки каталогов диска - в итоге
Рекурсивный запуск не возможен, мне сказали что разработчики исключили эту возможность в чтобы у прогрммистов не было лишних проблем
Рекурсивный запуск не возможен, мне сказали что разработчики исключили эту возможность в чтобы у прогрммистов не было лишних проблем
I work in LabVIEW 2009 !
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Re: Рекурсивный запуск VI
Именно так, правда проблемы были бы не у программистов а у разработчиков LV.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Рекурсивный запуск VI
Ужас, неужели???
Конечно можно обойтись и без этого, но всё же очень жаль, могло бы пригодится.
Конечно можно обойтись и без этого, но всё же очень жаль, могло бы пригодится.
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Re: Рекурсивный запуск VI
Если вспоминать все возможно кода внутри VI (неинициализированные сдвиговые регистры, реинтрантность, ссылочные типы и т.д, собственная "сборка мусора"), то можно получить несколько нестыковок. Это когда-то обсуждалось на ni.com
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Рекурсивный запуск VI
в нет понятия "локальных" переменных и нет размещения их "на стеке" как в си, например.
Я знаю 3 пути чтобы сделать рекурсию:
1. Через VI сервер - медленно но зато просто и интуитивно
2. Через преобразование алгоритма к не рекурсивному (любой рекурсивный алгоритм может быть преобразован к не-рекурсивному)
3. Используя динамическую передачу управления с классами. В этом, последнем я не до конца разобрался и буду рад если кто-нибуть доходчиво расскажет
Я знаю 3 пути чтобы сделать рекурсию:
1. Через VI сервер - медленно но зато просто и интуитивно
2. Через преобразование алгоритма к не рекурсивному (любой рекурсивный алгоритм может быть преобразован к не-рекурсивному)
3. Используя динамическую передачу управления с классами. В этом, последнем я не до конца разобрался и буду рад если кто-нибуть доходчиво расскажет
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Рекурсивный запуск VI
ну вот а я надеялся, что мне расскажут
Идея в том, что VI - метод класса с динамической передачей управления может вызвать любой другой член класса,
в том числе и себя. (на этапе генерации кода при динамической передаче управления не известно, метод
какого именно класса (в иерархии) будет вызван). VI, естественно, должна быть объявлена reentrant. Данные не размещаются на стеке,
значит share clones between instances, чтобы каждый вызов VI создавал новое Data Space.
Взято из примера к LV8.5.1:
Идея в том, что VI - метод класса с динамической передачей управления может вызвать любой другой член класса,
в том числе и себя. (на этапе генерации кода при динамической передаче управления не известно, метод
какого именно класса (в иерархии) будет вызван). VI, естественно, должна быть объявлена reentrant. Данные не размещаются на стеке,
значит share clones between instances, чтобы каждый вызов VI создавал новое Data Space.
Взято из примера к LV8.5.1:
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
Konstantin Sumenko
- expert
- Сообщения: 1439
- Зарегистрирован: 17 июл 2008, 12:20
- Награды: 2
- Версия LabVIEW: 2010
- Откуда: Moscow
- Поблагодарили: 1 раз
- Контактная информация:
Re: Рекурсивный запуск VI
Здесь все-так рекурсия получена, кстати интересно, как это работает с точки зрения быстродействия, ведь Dynamic Dispatch занимает время, пусть и небольшое.
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Рекурсивный запуск VI
Не понял вопроса. Реинтерантность - это свойство .eg писал(а):чем это хуже реинтрантности?
Рекурсия - способ написания алгоритма, используя реинтерантность.
Всё-таки это в первый раз в лабвью рекурсия в чистом виде.
Смотря с чем сравнивать. С server - то делать динамическую передачу гораздо быстрее.Crowbar писал(а):как это работает с точки зрения быстродействия,
Если рекурсивный алгоритм преобразовывать в итеративный тупо с помошью очередей - наверное где-то так же (в одном случае выделяется новое Dataspace при каждом вызове а в другом заводится новые элементы в очереди)
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Рекурсивный запуск VI
Сори, перепутал слово, на языке просто вертелосьmzu2006 писал(а):Не понял вопроса. Реинтерантность - это свойство .eg писал(а):чем это хуже реинтрантности?
Рекурсия - способ написания алгоритма, используя реинтерантность.
Всё-таки это в первый раз в лабвью рекурсия в чистом виде.
-
Korotenko
- developer
- Сообщения: 286
- Зарегистрирован: 25 июл 2008, 10:43
- Награды: 1
- Версия LabVIEW: 2009
- Откуда: Россия, Владивосток
- Контактная информация:
Re: Рекурсивный запуск VI
обошёлся сдвиговым регистром.mzu2006 писал(а):Если рекурсивный алгоритм преобразовывать в итеративный тупо с помошью очередей - наверное где-то так же (в одном случае выделяется новое Dataspace при каждом вызове а в другом заводится новые элементы в очереди)
у меня есть 2DArray, который расширяется/сужается в процессе работы, в эту переменную и складирую новые значения
I work in LabVIEW 2009 !
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 5 Ответы
- 446 Просмотры
-
Последнее сообщение ujin1