Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Длительное выполнение Lisp программ

Длительное выполнение Lisp программ

Ответ
Поиск в этой теме
Непрочитано 31.05.2005, 11:54 #1
Длительное выполнение Lisp программ
AleX
 
CNC
 
Belarus
Регистрация: 28.08.2003
Сообщений: 47

Пришлось столкнуться с проблемой возникающей при длительном (3-6мин) выполнении Lisp программы. А именно возникает эффект подвисания ACAD и заметно тормозит Windows. Програмка работает с Exsel через ActiveX, читает, анализирует сортирует и т.п. Оптимизация кода уже не помогает. Expres progbar немножко визуализирует ситуацию но и у него есть проблеммы: При прокрутке колесика мыши (срабатывает intellyzoom) и progbar вовсе пропадает, создавая эффект полного коллапса системы. однако Лиспик работает. ACAD полностью терят "лицо" изображая пустые квадратики до момента завершения програмки.
Может кто подскажет выход или направление его поиска?
А может ситуация просто тупиковая и связана с несовершенством реализации лиспа?
Просмотров: 13147
 
Непрочитано 31.05.2005, 15:10
#2
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Цитата:
А может ситуация просто тупиковая и связана с несовершенством реализации лиспа?
Может быть. На autocad.ru была тема автор представил код исполнение которого приводит к утечке памяти, тоже дело касалось то ли Excel то ли Access. Достаточно опытные программисты признали что это действительно несовершенство реализации Visual LISP.

Второй причиной может быть то что VLA- объекты не освобождаются с помощью функции (VLAX-RELEASE-OBJECT. Для автокадовских объектов это не особенно критично (до определённого предела конечно). А во для экселевсих очень.
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 31.05.2005, 16:31
#3
AleX

CNC
 
Регистрация: 28.08.2003
Belarus
Сообщений: 47


Для справки: acad2004, Exell2000, win2k, p4 1.4гц 256Мб
Цитата:
Второй причиной может быть то что VLA- объекты не освобождаются с помощью функции VLAX-RELEASE-OBJECT.
VLAX-RELEASE-OBJECT отпадает. использую ее даже чаще чем нужно например в циклах чтения. Даже возникает мысль о напрасных затратах времени на ее обработку.
Диспечер показывает что процессор грузится примерно 54%/ 65% Excel/Acad т.е. здесь скорее не использование памяти, а имеет место быть прегруз ЦП. Может как нибудь програмно приоритет подкоректировать, чтобы система могла дышать аль еще че?
Хотя замечал что Excel сам по себе при расчетах серьезных объемов данных ведет себя отвратительно похоже. однако и лисп тоже хорош попробуйте зациклить програмку убедитесь.
AleX вне форума  
 
Непрочитано 03.06.2005, 14:41 Re: Длительное выполнение Lisp программ
#4
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от AleX
А может ситуация просто тупиковая и связана с несовершенством реализации лиспа?
У меня для Вас три новости. Одна хорошая, вторая плохая, а третья замечательная.
Начну с хорошей - ситуация не тупиковая. Дело в том, что во время длительных вычислений 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.
Жду отзывов и замечаний.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 03.06.2005, 15:17
#5
AleX

CNC
 
Регистрация: 28.08.2003
Belarus
Сообщений: 47


Цитата:
Ну и третья новость - я IMHO знаю как это сделать на ObjectARX
Проблему на мой взгляд можно решить несколькими методами:
1.Отключить на время прокрутку колесика мышки чтобы прогресс мог нормально дожить до окончания и визуализровать выполняемый в памяти процесс.
2.Создать свой progres или его скромный аналог через "Modemacro"

А как вы предполагайте решить вопрос?
AleX вне форума  
 
Непрочитано 03.06.2005, 15:19
#6
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от AleX
А как вы предполагайте решить вопрос?
Читать подправленный мой предыдущий пост.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 03.06.2005, 15:33
#7
AleX

CNC
 
Регистрация: 28.08.2003
Belarus
Сообщений: 47


Как я понял процедура оживляет сам Акад а убитый скролингом прогбар не так и не допоет свою песню о работе моей програмки?
Или не так?
AleX вне форума  
 
Непрочитано 03.06.2005, 15:37
#8
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от AleX
Как я понял процедура оживляет сам Акад а убитый скролингом прогбар не так и не допоет свою песню о работе моей програмки?
Или не так?
Я не совсем понял Вашу терминологию, поэтому объясню точнее.
Эта процедура заставляет (или дает возможность) AutoCAD обработать пришедшие к нему сообщения (в том числе и о обновлении progressbar, и о скролинге его окна) и не закончит свою работу, пока AutoCAD не выполнит свою.
А вообще попробуйте и, надеюсь, все увидите сами.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 03.06.2005, 16:01
#9
AleX

CNC
 
Регистрация: 28.08.2003
Belarus
Сообщений: 47


К сожалению как я и предполагал progbar после прокрутки колесика мертв:
Код:
[Выделить все]
(acet-ui-progress)
(acet-ui-progress "Working:" 1000 )
(repeat 1000
  (onidleacad)
  (command "delay" 10)
  (acet-ui-progress -1)
)
;; kill meter
(acet-ui-progress)
Но Windows отзывается на мои действия нсколько быстрее. Хотя это впечатление может быть субъективным, и нуждается в проверке. При пререключении между приложениями АКАД как и прежде не отзывается до окончания выполнения Lsp
AleX вне форума  
 
Непрочитано 03.06.2005, 16:22
#10
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от AleX
К сожалению как я и предполагал progbar после прокрутки колесика мертв:
Черт. Я то думал, что progressbar перестаает двигаться, а он просто "забивается" координатами. Тут нужен другой подход. Нужно подумать...
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 03.06.2005, 16:46
#11
AleX

CNC
 
Регистрация: 28.08.2003
Belarus
Сообщений: 47


Цитата:
... а он просто "забивается" координатами
Возожно. А может и нет т.к. при отключении отслеживания координат Progbar все равно погибает
AleX вне форума  
 
Непрочитано 03.06.2005, 16:55
#12
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от AleX
Цитата:
... а он просто "забивается" координатами
Возожно. А может и нет т.к. при отключении отслеживания координат Progbar все равно погибает
А так тоже погибает :?:
Код:
[Выделить все]
(defun C:TEST ( / i n)
  (acet-ui-progress) 
  (setq n 1000 i 0)
  (repeat n 
    (onidleacad) 
    (command "delay" 10) 
    (acet-ui-progress "Working:" n ) 
    (acet-ui-progress (setq i (1+ i))) 
  ) 
  ;; kill meter 
  (acet-ui-progress) 
)
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 03.06.2005, 17:16
#13
AleX

CNC
 
Регистрация: 28.08.2003
Belarus
Сообщений: 47


Цитата:
А так тоже погибает
Да так нет. :shock:
Но можно ли это назвать progbarом. и как определить когда данной конструкции включаться :?:
AleX вне форума  
 
Непрочитано 03.06.2005, 17:20
#14
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Ладно тезка беру над Вами шефство Только уточните с какой версией AutoCAD Вы работаете, а то писать сразу под несколько займет слишком много времени... Постараюсь выдать Вам несколько вариантов для работы. Скорее всего это будет не стандртный прогрессбар, т.к. из-за бага AutoCAD он действительно чистится при скроллинге.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 03.06.2005, 17:57
#15
AleX

CNC
 
Регистрация: 28.08.2003
Belarus
Сообщений: 47


Цитата:
уточните с какой версией AutoCAD Вы работаете
Для справки: acad2004 R16 En, Win2k sp4
Цитата:
Скорее всего это будет не стандртный прогрессбар
Заранее благодарен. 8)
За шефство конечно спасибо. :P
AleX вне форума  
 
Непрочитано 03.06.2005, 19:23
#16
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Сделал четыре варианта:
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 сначала идут проценты, а за ними текст.
Александр Ривилис вне форума  
 
Непрочитано 04.06.2005, 13:21
#17
Jurasic


 
Регистрация: 10.01.2005
Москва
Сообщений: 89
<phrase 1=


А у меня всегда нормально работала функция из библиотеки DosLib г-на Robert McNeel : http://download.mcneel.com/download.asp?id=doslib Описание в хелпе есть, называется функция "dos_getprogress"... Правда IntelliZOOM/PAN все равно работают, но само окошко исправно отображает процентики.
Jurasic вне форума  
 
Автор темы   Непрочитано 06.06.2005, 14:01
#18
AleX

CNC
 
Регистрация: 28.08.2003
Belarus
Сообщений: 47


Цитата:
Можно пользоваться IntelliZOOM/PAN свободно (хотя мне не очень понятно зачем ими пользоваться во время длительного процесса работы программы) и переключатся на другие приложения
Конечно пока выполняется программа можно сделать кофе, отдохнуть. Но чаще переключаюсь на другую работу, ведь лисп программы не выполняются в фоновом режиме. А при переключении между приложениями и отсутствии отклика машинально крутишь мышь.Так что Вы создали очень полезную вещь. Спасибо. О впечатлениях см. на Autokad.ru forum.
AleX вне форума  
 
Непрочитано 06.06.2005, 14:58
#19
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от AleX
Спасибо. О впечатлениях см. на Autokad.ru forum.
Очень люблю, когда меня хвалят. Сразу хочется сделать еще что-нибудь полезное...
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 13.06.2005, 17:00
#20
AleX

CNC
 
Регистрация: 28.08.2003
Belarus
Сообщений: 47


Цитата:
Конечно пока выполняется программа можно сделать кофе, отдохнуть. Но чаще переключаюсь на другую работу, ведь лисп программы не выполняются вфоновом режиме.
Написал и засомневался. А так ли это в действительности. Терзают смутные догадки ,что это истина не в последней инстанции.
AleX вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Длительное выполнение Lisp программ

Размещение рекламы