wdb 发表于 2003-7-25 23:04:00

我的程序运行时间较长,任何才能实现类似进度条或完成百分比的设计

我编的vlisp程序,运行时不需要交互操作,但运行时间较长.为了明确的告诉用户程序正在运行,我想设计出类似进度条或完成百分比进度的程序.想用(princ "|")在命令行不停的打印竖杠的方法来表示程序正在运行,但却发现程序运行时并不在命令行逐个显示竖杠,而是程序运行完后才同时把所有的竖杠都显示出来.达不到告诉用户"程序正在运行中"的目的.请高手指点. 下面是试验程序,(我的计算机是300M主频)
(defun c:bb (/ all counter)
(setq all 10)
(setq counter 1.0)
(while (> all 0)
    (setq counter 1.0)
    (while (< counter 100000)
      (setq counter (* counter 1.0001))
    )
    (princ "|")
    (setq all (1- all))
)
(princ "完成")
(princ )
)

itoboy 发表于 2018-1-18 14:34:16

我也来发个简易版的,采用grtext方式

;;(jd n i),n为重复运算的第几个,i为需要运算的总个数
(defun jd (n i / box in re)
(setq box '("" "▏" "▎" "▍" "▌" "▋" "▊" "▉"))
(setq in (fix (/ (* 160 n) i)))
(setq re (rem in 8))
(setq in (* 2 (fix (/ in 8))))
(setq re (nth re box))
;;;(setq n (1+ n))
(grtext -2
   (strcat (rtos (/ (* 100.0 n) i) 2 1) "%"
         "程序正在运行,请稍等"
         (substr "████████████████████" 1 in)
         re)
)
)

前生 发表于 2003-7-28 11:19:00

呵呵,老张回来了?

一个趣味程序,很久以前的事情了
(defun c:setup ()
;;;_____________________________
(defun done (/ n m)
    (mode_tile "accept" 1)
    (mode_tile "cancel" 1)
    (start_image "t2")
    (fill_image
      0
      0
      (dimx_tile "t2")
      (dimy_tile "t2")
      5
    )
    (end_image)
    (setq n 1)
    (repeat 100
      (setq m 0)
      (repeat 4500
        (setq m (1+ m))
      )
      (set_tile        "t1"
                (strcat "已经进行了% " (vl-princ-to-string n))
      )
      (start_image "t2")
      (fill_image
        0
        0
        (fix (* n (/ (dimx_tile "t2") 100.0)))
        (dimy_tile "t2")
        1
      )
      (end_image)
      (setq n (1+ n))
    )
    (mode_tile "accept" 1)
    (mode_tile "cancel" 0)
    (set_tile "t1" "OursCAd 注册程序已经完成!")
)
;;;_____________________________
(setq t1 " ☆☆☆☆☆ ")                ;serial由oursjg1-->oursjgjs后得到
(setq dh nil)
(setq seria1 "缺省值为1234567890 ")
(SETQ dh (LOAD_DIALOG "atcad.DCL"))
(if (new_dialog "oursetup" dh)
    (progn
      (set_tile "t1" t1)
      (set_tile "pass" seria1)
      (action_tile "cancel" "(done_dialog 0)")
      (action_tile "accept" "(dogwrite)(done)")
      (action_tile "pass" "(setq seria1 $value)")
      (setq do_next (start_dialog))
      (cond
        ((= 1 do_next)
       (progn
           (done)
       )
        )

      )
    )
)
(unload_dialog dh)
(PRINC)
)


;;;;;;;;;;dcl文件
oursetup:dialog{label="☆ ☆ ☆ Ours CAD安 装 程 式 ☆ ☆ ☆";
            alignment=centered;
      spacer_1;
   :row{
   :text{label=" Ours CAD 疯狂设计工具软件环境初始化";}
   :text{label=" %%% ";key="t1";}
         }
   : image_button {color=5;key="t2";width=60;height=1;}
   :row{
      :edit_box{label="输入密码:";edit_width=55;key="pass";password_char="*";}
      }
      spacer_1;                   
      ok_cancel;   
            }

zhang8755 发表于 2003-7-26 14:25:00

我试了一下,跟你说的不一样,程序运行时在命令行逐个显示竖杠,我的计算机是2.4G主频

spring 发表于 2003-7-26 19:45:00

我的怎麼不行

zhang8755发表于2003-7-26 14:25:00static/image/common/back.gif我试了一下,跟你说的不一样,程序运行时在命令行逐个显示竖杠,我的计算机是2.4G主频



我的怎麼不行,主频怎麼看???

myfreemind 发表于 2003-7-26 20:01:00

我的也是全部显示!1.7g主频

spring 发表于 2003-7-26 20:47:00

myfreemind发表于2003-7-26 20:01:00static/image/common/back.gif我的也是全部显示!1.7g主频



如何知道我電腦的主频

myfreemind 发表于 2003-7-27 18:23:00

你买电脑的时候没有看cpu的主频吗?在启动的时候,会有显示cpu的主频和内存容量!

spring 发表于 2003-7-28 08:31:00

我是用公司的電腦.

xazhji 发表于 2003-7-28 10:46:00

我同样有过楼主的现象,我们用的是同样的方法,当然,也是同样的结果!
不过,我看到了doslid函数中,有 “操作AutoCAD状态栏的进度器”   dos_progbar,应该可以用,不过,我试过一次,好像不知道是怎么控制进度的,只出现一个静态的进度器框。

陈伯雄 发表于 2003-7-28 11:29:00

页: [1] 2 3
查看完整版本: 我的程序运行时间较长,任何才能实现类似进度条或完成百分比的设计