[英]J programming how to wait fo X seconds before executing the next verb?
我想在執行動詞中的下一行之前等待 X 秒。 到目前為止,我已經嘗試過及時(延遲)找到的這個外國命令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 是緩沖的,並且 JQT 只會在返回控制權時打印 output,除非您使用 wd'msgs'。 這有效:
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''
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.