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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как организовать событие "Закончилась минута"?

Как организовать событие "Закончилась минута"?

Ответ
Поиск в этой теме
Непрочитано 06.12.2004, 15:45
Как организовать событие "Закончилась минута"?
kos
 
LISP-программист
 
Тутэйшы
Регистрация: 25.08.2003
Сообщений: 238

Есть такая необходимость: раз в минуту вылолнять определенную функцию (типа функции отклика). Очень похоже на обработку реактора. Однако AutoCAD не предоставляет события "Закончилась минута". Попытка организовать бесконечный цикл типа
Код:
с последующим анализом времени в принципе работает, но загружает процессор так, что другие процессы чахнут.
Есть ли решение этой проблемы (задача для AutoCAD'а необычная...)?
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
Просмотров: 8214
 
Непрочитано 15.03.2009, 19:20
#21
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


В программе ProgressBars от А.Ривилиса, по-моему, была соответствующая функция. См.вложение.
Вложения
Тип файла: zip ProgressBars.zip (51.6 Кб, 74 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.03.2009, 12:31
#22
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


vk, правильно начал, но не правильно организовал.
Есть такой СОМ объект MSScriptControl.ScriptControl, который позволяет выполнять скрипт-коды из под других языков, к примеру, из под AutoLisp.

Цитата:
Код:
[Выделить все]
(setq svr (vlax-get-or-create-object "MSScriptControl.ScriptControl"))
(vlax-put-property svr "Language" "vbscript")
(vlax-invoke-method svr "AddCode" "Function test3 () msgbox \"Привет!\" End Function")
(vlax-invoke-method svr "AddCode" "Function test2 () msgbox \"Второе сообщение!\" End Function")
(vlax-invoke-method svr "eval" "test3")
(vlax-invoke-method svr "eval" "test2")
Две функции test3 и test2 какую хотите, такую и запускайте, а они еще и возвращать значения могут.
вот от сюда:
http://forum.dwg.ru/showpost.php?p=215514&postcount=107

Пишешь таймер на vbscript или jscript, загружаешь его в MSScriptControl.ScriptControl как показано выше и запускаешь лисп. Лисп создает СОМ объект, укомплектовывает его функцией таймера и строчка
(vlax-invoke-method svr "eval" "test2") или другая, запускают этот таймер. Лисп заканчивает работу как только передал команду запустить таймер. Таким образом Автокад освобождается и можно на нем работать. Отсчет происходит в СОМ объекте, что не влияет на работу. Как только таймер закончил свою работу, скрипт устанавливает связь с Автокадом

Код:
[Выделить все]
(vlax-invoke-method ScriptControl "AddCode" "
  Set AutoCAD = GetObject(, \"AutoCAD.Application\")
  Set ActiveDocument = AutoCAD.ActiveDocument
")
и передает ему нужное действие
Код:
[Выделить все]
(vlax-invoke-method ScriptControl "AddCode" "
  Sub vbsIE_OnQuit()
    ActiveDocument.SendCommand \"(lispIE_OnQuit) \"
  End Sub
")
Коды даны как примеры.

==================================================

Есть другой вариант.
Создаешь файл *.vbs и записываешь в него таймер и связь с Автокадом по завершении работы.
Запускаешь файл одной из моих функций
http://forum.dwg.ru/showthread.php?t=16998

Лучше всего выбирать дочерний процесс.

===================================================

Понятное дело, что функция Автолиспа, которая запускается скриптом должна оканчиваться повторным запуском скрипта с таймером.
Supermax вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как организовать событие "Закончилась минута"?