NetBee 发表于 2015-5-11 14:18:56

lisp中使用command或vl-cmdf时,数据过多出现"未响应"假死状态

lisp中使用command或vl-cmdf时,数据过多出现无响应假死状态,导致使用者认为程序死了。
怎么解决,让CAD保持响应?
如:
gysjy的连接线段的小LSP
在我们的cad绘图中常常需要将多条线段连接成一条线。用pedit中的j命令可以实现这一功能要求。而本程序可以框选图元,批量连接所选的线段:(defun c:nn(/ ss s)
(princ "\n 本程序用来批量连接线段。gysjy 2009.10.27")
(setq ss (ssget '((-4 . "<OR")
                      (0 . "LINE")(0 . "ARC")
                      (-4 . "<AND")(0 . "LWPOLYLINE")(70 . 0)(-4 . "AND>")
                   (-4 . "OR>")))
)
(while ss
    (setq s (ssname ss 0))
    (if (or (= "LINE" (cdr (assoc 0 (entget s))))
            (= "ARC" (cdr (assoc 0 (entget s))))
      )
      (command "pedit" s "y" "j" "p" "" "x")
      (command "pedit" s "j" "p" "" "x")
    )
    (setq ss (ssget "p"))
)
(princ)
)在1000个矩形打散后,重新连接过程,后期CAD就会出现忙状态,标题栏上显示“未响应”。
很多使用者无经验就为认为程序已经死机,就没有耐心等待了。
如何避免这种情况?

lucas_3333 发表于 2015-5-11 14:31:54

网蜂大师,好久不见!

自贡黄明儒 发表于 2015-5-11 15:16:16

本帖最后由 自贡黄明儒 于 2015-5-11 15:21 编辑

(VL-CATCH-ALL-APPLY 'VL-CMDF ....
循环中加入
(defun spin (wh)
    (princ (strcat "\r"
                  wh
                  (cond ((= #spin "|") (setq #spin "/"))
                          ((= #spin "/") (setq #spin "-"))
                          ((= #spin "-") (setq #spin "\\"))
                          (T (setq #spin "|"))
                  )
          )
    )
    (princ)
)

自贡黄明儒 发表于 2015-5-11 15:27:09

这段程序好象不是最精简的

wen1235 发表于 2015-5-17 19:04:54

本帖最后由 wen1235 于 2015-5-17 19:07 编辑

网蜂大神 你的程序不用循环试试
只要判断是否有多线段就好
(command “pedit” “m” (ssget) “y” “j” “” “”)
这样会快很多

NetBee 发表于 2015-6-16 23:18:54

wen1235 发表于 2015-5-17 19:04 static/image/common/back.gif
网蜂大神 你的程序不用循环试试
只要判断是否有多线段就好
(command “pedit” “m” (ssget) “y” “ ...

最初是就使用的这句,对象过多的时候同样假死。
才想到的加入进度条。
===
经过这段时间的测试,发现在纯CAD环境中进度条正常运行。在CASS环境下容易出现:未响应,但程序能正常运行完毕。
有时间再查了。
页: [1]
查看完整版本: lisp中使用command或vl-cmdf时,数据过多出现"未响应"假死状态