明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1592|回复: 4

加载lisp后自动运行某个函数的设想。。不成功

[复制链接]
发表于 2012-11-22 19:39 | 显示全部楼层 |阅读模式
有这么一个设想,如果lisp加载之后,我想立即执行这个函数,但是又不想把这个函数定义在前面,想用下面这个办法,结果CAD界面卡死,只能用任务管理器关闭CAD。

  1. (vl-load-com)
  2. ;;;balabalabala~~~
  3. (if (not *RunAtOnce*)
  4.   (setq *RunAtOnce*
  5.   (vlr-docmanager-reactor
  6.     nil
  7.     '(
  8.       (:vlr-documentToBeActivated . IWillRunAtOnce)
  9.      )
  10.   )
  11.   )
  12. )
  13. ;;;balabalabala~~~
  14. (defun IWillRunAtOnce (reactor command-list)
  15.   (princ "\nI will run at once!")
  16.   (if *RunAtOnce*
  17.     (progn
  18.       (vlr-remove-all :VLR-DocManager-Reactor )
  19.       (setq *RunAtOnce* nil)
  20.     )
  21.   )
  22.   (princ)
  23. )


请教下问题出在哪里?
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2012-11-22 19:48 | 显示全部楼层
本帖最后由 阿然 于 2012-11-22 19:49 编辑

另外再请教下:
(vlr-remove reactor)
(vlr-owner-remove reactor owner)
这两个函数我个人理解是这样的owner 全部都(vlr-owner-remove)掉的反应器应该已经从cad中完全删除了吧?
(vlr-remove)适用owner为nil的reactor,如果owner存在,只是暂时禁用,可以用(vlr-add)函数恢复使用?
(vlr-remove-all)函数是把反应器直接从CAD中删除了,和vlr-remove的作用不一样?
上面三个理解,希望各位大侠解答。
发表于 2012-11-23 08:19 | 显示全部楼层
阿然 发表于 2012-11-22 19:48
另外再请教下:
(vlr-remove reactor)
(vlr-owner-remove reactor owner)

(vlr-remove reactor) 是禁用反应器,反应器并未删除
(vlr-owner-remove reactor owner)是从反应器所有者列表中删除 VLA 对象,反应器并未删除
要删除反应器对象,先获取反应器对象,用vla-delete函数删除反应器对象!
你给的例子只要将回调函数IWillRunAtOnce放在启动反应器语句之前应该就可以了!
 楼主| 发表于 2012-11-23 08:34 | 显示全部楼层
按照gu版说的,把iwillrunatonce放在前面,也一样卡死,这是咋回事捏?
发表于 2012-11-23 09:13 | 显示全部楼层
没有这么麻烦,比如在你的lisp里有一个叫abc的函数,你希望加载时自动运行这个函数,只需在你的lisp最后加一句(abc)即可。

点评

恩,这种办法当然可以,我上面说的方法就是一种想法,结果不成功,想知道问题出在哪里  发表于 2012-11-23 09:32
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 21:00 , Processed in 0.267121 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表