如何解决J编程如何在执行下一个动词之前等待X秒?
我想在执行动词的下一行之前等待 X 秒。
到目前为止,我已经尝试了在 time (delay) 中找到的这个外部命令 6!:3 (2.5)
,尽管它看起来整个动词执行被延迟而不是只延迟下一行的执行。
我想在 while 循环中使用它。
示例:
while. T do.
verb1''
verb2''
wait for X seconds
end.
我做错了什么?
解决方法
我认为您没有做错任何事情,我认为您的程序正在逐行延迟,即使它看起来像是在阻止整个动词的执行。
t=: 3 : 0
echo '1';6!:0 '' NB. timestamp
6!:3 (2.5)
echo '2';6!:0 ''
6!:3 (2.5)
echo '3';6!:0 ''
)
t ''
┌─┬──────────────────────┐
│1│2021 1 1 12 24 19.7376│
└─┴──────────────────────┘
┌─┬──────────────────────┐
│2│2021 1 1 12 24 22.2398│
└─┴──────────────────────┘
┌─┬──────────────────────┐
│3│2021 1 1 12 24 24.7418│
└─┴──────────────────────┘
当我运行动词时,它确实在我看到结果之前导致了大约 5 秒的延迟,但看起来这些行实际上是在适当的时间运行的。
,这里讨论的行为实际上只在 jqt 中观察到,它发生是由于实际执行代码的 J 进程和显示它的 GUI 进程之间的缓冲 I/O。
在jconsole、jhs,甚至在Android上,以下代码显示2,等待2.5秒,然后显示1:
lag =: 6!:3 bind 2.5
echo 1 [ lag '' [ echo 2
,
你没有做错任何事。但是,正如 Julian 所指出的,I/O 是缓冲的,除非您使用 wd'msgs',否则 JQT 只会在返回控制权时打印输出。这有效:
NB. sleep after flushing I/O when running JQt
sleep =: 6!:3@(][ ([:wd'msgs'"_)^:IFQT)
foo =: 3 : 0
for. i. 5 do.
echo 'hello'
sleep 1
end.
)
foo''
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。