|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
23.06.2006, 15:12 | #1 | |
Виснет компьютер при обработке длинных списков
Программист широкого профиля.
Челябинск
Регистрация: 08.09.2005
Сообщений: 722
|
||
Просмотров: 6381
|
|
||||
Цитата:
Извини, сейчас мне не до твоей программы, но сходу посоветую! Добавь в свою программу прогресс бар! Постоянное обращение к нему - будет оживлять экран и уменьшать видимые тормоза акада. Вообще советую обратить внимание на отлично зарекомендовавшие себя программы на ARX - написал Александр Ривилис! http://www.maestrogroup.com.ua/support/ProgressBars.zip Использую постоянно... Кстати, там есть команды, размораживающие зависший интерфейс акада - т.е. во время выполнения лиспа можно добавить дополнительные команды, чтоб pan/zoom - работали без тормозов! |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Думаю, что можно попробовать отключить регенерацию (regenmode), попробовать выполнить, потом vla-regen для активного документа и в режиме, наверное, acallviewports. потом восстановить regenmode.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Вопросы:
1) Версия AutoCAD? Наличие SP? 2) Версия Windows? 3) Параметры PC (в первую очередь величина RAM)? Замечание: Когда работает lisp-программа не использующая взаимодействие с пользователем (как в данном случае) AutoCAD не успевает обработать свою очередь сообщений и может подвиснуть. Совет Евгения в ряде случаев может помочь, правда за счет некоторой потери производительности. |
||||
|
||||
Цитата:
Во-вторых, по поводу что быстрее - вопрос далеко не однозначный. В-третьих, если уж на что-то менять, то на ObjectARX. |
||||
|
||||
Регистрация: 13.06.2005
Сообщений: 314
|
Цитата:
|
|||
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
Компьютер у меня слабый
Селерон 2000Мгц озу 256Мб Windows XP SP1 Pro Autocad 2006 SP1 И вот возникает вопрос по ProgressBars Я не силен в программировании и мне не понятно когда и в каком месте программы нужно применять функции из данного пакета. Подскажите пожалуйста на примере вот такой самой подходящей для данной темы функции Код:
(num_lst_s_vla 1 2000000 1 1) Как ее оптимизировать с помощью ProgressBars? Или где можно получить более подробную информацию? |
|||
|
||||
Компьютер действительно достаточно слабый. Особенно не хватает озу (для минимальной конфигурации нужно 512М).
Попробуй такой вариант (ProgressBars.arx должен быть в путях доступа AutoCAD): Код:
|
||||
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
Вот поколдовал я над ProgressBars и вроде бы понял как их использовать.
И вот еще хочу спросить совета по использованию в ситуации когда обрабатывается не один ряд списков а несколько рядов, как например в моей программе про осевые линии. Там процесс идет таким образом – получаем один список, каким либо образом преобразуем этот список потом получившийся список еще раз преобразуем итд. Единственное условие которое там соблюдается – это количество элементов каждого списка одинаково. И если на каждый шаг ставить отдельный прогресс то получится некрасиво. Поэтому я наколдовал, покачто на примере (num_lst_s_vla), вот такое Код:
Есть какиенибудь другие способы наложения прогресса на несколько рядов? Если мой способ приемлем то: Куда лучше вставить (OnIdleAcad [<TimeInt>]) и (mDelay <msecs>)? У (PrgSet <Текст> <MaxValue> [<TimeInt>]) какое максимальное и минимальное значение [<TimeInt>]? И еще вопрос о такой ситуации: В программе укорачивания линий есть такой момент Код:
Если во время работы прогресса нажать ESC то в командную строку выдается Код:
И почемуто не видно индикатора в командной строке, в заголовке и диалоге все работает. Всем огромное спасибо. Отдельное спасибо Александру Ривилису. |
|||
|
||||
Я когда-то использовал, потом отказался.
От зависаний помогает тем, что пользователь наблюдает не зависший автокад а растущий прогрессбар. Причины, почему отказался: - для разных версий автокада разные arx-файлы прогрессбара, все их надо располагать вместе с программой, а мне лично нравится, когда вся программа только в одном лисп-файлике - прогрессбар притормаживает работу программы - в тех программах, где я его использовал, оказалось возможным пересмотреть алгоритм, чтобы не было многоминутных вычислений. А "заморочится" стоит! Потому что, если без многоминутных вычислений не обойтись, то альтернативы практически нет. |
||||
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
>>Do$
Спасибо за подсказку. Был бы очень благодарен, если бы ты заглянул сюда http://forum.dwg.ru/showthread.php?p=645087&posted=1 На случай, если не заглянешь, спрошу здесь. Благодаря чему ProgressBar решает сабжевую проблему? я попробовал (mdelay) - не помогло. Что в нем (в ProgressBar.arx) еще такое используется, не знаешь? (Автору ProgressBar'а Александру Ривилису я уже задал этот вопрос, жду ответа и от него)
__________________
На LISPе можно мыслить! |
|||
|
||||
Как я думаю, через определенное кол-во вычислений управление передается arx приложению, лисп-приложение приостанавливается, обновляется экран, изменяется положение прогрессбара и затем управление возвращается лисп-приложению.
Лучше автора никто не ответит, так что надо ждать |
||||
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
Ага. Если это действительно так, то по сути это организация полноценных разрывов в выполнении лисп-программы. Спасибо. Жду подтверждения от автора :-)
__________________
На LISPе можно мыслить! |
|||
|
||||
Цитата:
Приблизительно так. |
||||
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
__________________
На LISPе можно мыслить! |
|||