明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9937|回复: 22

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

  [复制链接]
发表于 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 )
)
发表于 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)
  )
)
回复 支持 0 反对 1

使用道具 举报

发表于 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;   
              }
发表于 2003-7-26 14:25:00 | 显示全部楼层
我试了一下,跟你说的不一样,程序运行时在命令行逐个显示竖杠,我的计算机是2.4G主频
发表于 2003-7-26 19:45:00 | 显示全部楼层

我的怎麼不行

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



我的怎麼不行,主频怎麼看???
发表于 2003-7-26 20:01:00 | 显示全部楼层
我的也是全部显示!1.7g主频
发表于 2003-7-26 20:47:00 | 显示全部楼层
myfreemind发表于2003-7-26 20:01:00我的也是全部显示!1.7g主频



如何知道我電腦的主频
发表于 2003-7-27 18:23:00 | 显示全部楼层
你买电脑的时候没有看cpu的主频吗?在启动的时候,会有显示cpu的主频和内存容量!
发表于 2003-7-28 08:31:00 | 显示全部楼层

我是用公司的電腦.

发表于 2003-7-28 10:46:00 | 显示全部楼层
我同样有过楼主的现象,我们用的是同样的方法,当然,也是同样的结果!
不过,我看到了doslid函数中,有 “操作AutoCAD状态栏的进度器”   dos_progbar  ,应该可以用,不过,我试过一次,好像不知道是怎么控制进度的,只出现一个静态的进度器框。
发表于 2003-7-28 11:29:00 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 18:42 , Processed in 0.178806 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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