簡體   English   中英

J編程如何在執行下一個動詞之前等待X秒?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM