| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
31.05.2005, 11:54 | #1 | |
Длительное выполнение Lisp программ
CNC
Belarus
Регистрация: 28.08.2003
Сообщений: 47
|
||
Просмотров: 13153
|
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Цитата:
Второй причиной может быть то что VLA- объекты не освобождаются с помощью функции (VLAX-RELEASE-OBJECT. Для автокадовских объектов это не особенно критично (до определённого предела конечно). А во для экселевсих очень. |
|||
|
||||
CNC Регистрация: 28.08.2003
Belarus
Сообщений: 47
|
Для справки: acad2004, Exell2000, win2k, p4 1.4гц 256Мб
Цитата:
Диспечер показывает что процессор грузится примерно 54%/ 65% Excel/Acad т.е. здесь скорее не использование памяти, а имеет место быть прегруз ЦП. Может как нибудь програмно приоритет подкоректировать, чтобы система могла дышать аль еще че? Хотя замечал что Excel сам по себе при расчетах серьезных объемов данных ведет себя отвратительно похоже. однако и лисп тоже хорош попробуйте зациклить програмку убедитесь. |
|||
|
||||
Цитата:
Начну с хорошей - ситуация не тупиковая. Дело в том, что во время длительных вычислений AutoCAD не попадает в свой диспертчерский цикл для обработки сообщений (в том числе и от мыши). Создается иллюзия его "подвисания". Так что достаточно дать возможность AutoCAD обрабатыват свои сообщения, как он сможет "ожить". Теперь плохая новость - по всей видимости на AutoLISP/VisualLISP это сделать нельзя. Ну и третья новость - я IMHO знаю как это сделать на ObjectARX. [ATTACH]1117797149.dwg[/ATTACH] Приаттаченный файл - это zip-файл, содержащий два ARX-файла (для AutoCAD 2000-2002: IdleAcad2000.arx , для AutoCAD 2004-2006: IdleAcad2004.arx) Технология работы очень проста. Загрузить соответствующий файл и везде в lisp-функции после вызова progressbar организовать вызов (onidleacad). Можно и не только в этих местах. Чем чаще в коде эта функция будет встречаться, тем менее заторможенным будет выглядеть AutoCAD. Жду отзывов и замечаний. |
||||
|
||||
CNC Регистрация: 28.08.2003
Belarus
Сообщений: 47
|
Цитата:
1.Отключить на время прокрутку колесика мышки чтобы прогресс мог нормально дожить до окончания и визуализровать выполняемый в памяти процесс. 2.Создать свой progres или его скромный аналог через "Modemacro" А как вы предполагайте решить вопрос? |
|||
|
||||
Цитата:
Эта процедура заставляет (или дает возможность) AutoCAD обработать пришедшие к нему сообщения (в том числе и о обновлении progressbar, и о скролинге его окна) и не закончит свою работу, пока AutoCAD не выполнит свою. А вообще попробуйте и, надеюсь, все увидите сами. |
||||
|
||||
CNC Регистрация: 28.08.2003
Belarus
Сообщений: 47
|
К сожалению как я и предполагал progbar после прокрутки колесика мертв:
Код:
|
|||
|
||||
Цитата:
|
||||
|
||||
Ладно тезка беру над Вами шефство Только уточните с какой версией AutoCAD Вы работаете, а то писать сразу под несколько займет слишком много времени... Постараюсь выдать Вам несколько вариантов для работы. Скорее всего это будет не стандртный прогрессбар, т.к. из-за бага AutoCAD он действительно чистится при скроллинге.
|
||||
|
||||
Сделал четыре варианта:
1) Индикатор процесса в ProgressBar (обычный, но с запретом IntelliZOOM/PAN и обработкой других ситуаций) 2) Индикатор процесса в командной строке AutoCAD (процентики бегут) 3) Индикатор процесса в заголовке главного окна AutoCAD 4) Индикатор процесса в отдельном окошке (тонкая плоска по центру окна) поверх окна AutoCAD При аварийном завершении или прерывании этих функций индикаторы процесса убираются автоматически. При переключении между AutoCAD и другими приложениями окно AutoCAD обновляется нормально. P.S.: Очень надеюсь на конструктивную критику и пожелания. Добавлено: Выложил обновленную версию: http://www.maestrogroup.com.ua/support/ProgressBars.zip Там ProgressBars.arx и ProgressBars.lsp (для тестирования) Исправления: 1) Вызов (onidleacad) уже не обязателен - включен внутрь во все прогрессбары. 2) Можно пользоваться IntelliZOOM/PAN свободно (хотя мне не очень понятно зачем ими пользоваться во время длительного процесса работы программы) и переключатся на другие приложения. 3) В прогрессбаре в заголовке окна AutoCAD сначала идут проценты, а за ними текст. |
||||
|
||||
Регистрация: 10.01.2005
Москва
Сообщений: 89
|
А у меня всегда нормально работала функция из библиотеки DosLib г-на Robert McNeel : http://download.mcneel.com/download.asp?id=doslib Описание в хелпе есть, называется функция "dos_getprogress"... Правда IntelliZOOM/PAN все равно работают, но само окошко исправно отображает процентики.
|
|||
|
||||
CNC Регистрация: 28.08.2003
Belarus
Сообщений: 47
|
Цитата:
|
|||
|
||||
CNC Регистрация: 28.08.2003
Belarus
Сообщений: 47
|
Цитата:
|
|||