harilalmn 发表于 2022-7-6 08:53:25

设置用户输入超时

有没有办法为用户输入设置倒计时?
 
我试图在AutoCAD中创建一个CAD测试例程。一旦该命令被激活,它将询问15个问题,并在鼠标右键单击菜单下提供答案选项。但我必须设置最长30秒的时间从四个选项中选择答案。
代码在这里。如何设置倒计时?
 
(defun c:CADTEST()
(setq n 0)
(initget 1 "zoomDynamic zoomExtents zoomCenter zoomPan")
(setq Answer01 (getkword "Which one of the following commands allows simultaneous pan and zoom? "))
(if
   (eq Answer01 "zoomDynamic")
(Progn
(alert "You are right...")
(setq n (1+ n))
)
(alert "Sorry, You are wrong...")
)
(alert (strcat "You scored " (itoa n) "/1"))
)

MSasu 发表于 2022-7-6 09:04:05

您可以通过读取日期系统变量并将其与参考值(进程开始时读取的日期)进行比较来计算时间。我不知道你怎么能把它和输入过程联系起来——如果超过允许的时间,就跳到下一个问题。也许只是设置一个超时答案(见下文)?
 

(setq RefTime (getvar “DATE”))
;{ask user for input}
(if (> (- (getvar “DATE”) RefTime) TimeLimit) (prompt ”Sorry, your answer exceeded allowed time!”))

 
也许有更好的方法,我会试着去想别的…
 
当做
米尔恰

harilalmn 发表于 2022-7-6 09:11:30

msasu,非常感谢。。。我会试试。。。!!
在上面的例子中,我实际上想用空格来显示选项。比如,我想展示“Zoom Dynamic”而不是“Zoom_Dynamic”,有没有办法添加句子(单词之间有空格)作为initget函数的参数?

MSasu 发表于 2022-7-6 09:21:32

 
这是不可能的,因为空间保留为关键字分隔符。您可以使用GETSTRING而不是GETKWORD,但这将需要额外的代码来验证答案。
 
当做
米尔恰

harilalmn 发表于 2022-7-6 09:34:07

好啊谢谢

Lee Mac 发表于 2022-7-6 09:43:15

由于LISP无法实现多线程,因此您无法在同时提示用户的同时监视时间,因此必须关注其中一个过程。
 
但是,您可以监控每个问题发出后的时间:
 
(defun c:测试(/\u lst->str \u askquestion-answers-answers-intime-question-questions-start-time)(设置时间10);;秒(defun \u lst->str(lst del/str)(setq str(car lst))(foreach x(cdr lst)(setq str(strcat str del x)))str)(defun \u askquestion(init ques)(initget(\u lst->str init“”)(getkword(strcat ques“[”(\u lst->str init”/“):”))(setq questions'((“男”“女”“其他”)“\nAre you”)((“苹果”“香蕉”“梨”)“\n你最喜欢哪种水果?”)((“红”“蓝”“绿”“黄”)“\n你最喜欢哪种颜色?”))(setq时间(*时间1000)(setq start(getvar’毫秒))(while(和(setq intime(<((getvar’毫秒)start)time))(setq QUEST(car QUESTS))(princ(strcat“\n剩余时间:”(RTO(/(-time(-getvar’毫秒)start))1000。)2.2)“秒。”)(if(setq-answer(apply'\u askquestion-question))(setq-answers(cons-answer-answers))(setq-answers(cons“No-answer”answers)))(setq-questions(cdr-questions)))(terpri)(if(not intime)(princ“\n===>超时!

harilalmn 发表于 2022-7-6 09:45:00

谢谢你的密码李。。。!!!
我手头有东西要玩。谢谢。。。

Lee Mac 发表于 2022-7-6 09:58:21

 
这不是一个很好的例子,但它给了你一些如何实现目标的想法
页: [1]
查看完整版本: 设置用户输入超时