発端
ご飯食べながらボーっとCC公式Wiki読んでいたら次のような記述をみつけました。
http://computercraft.info/wiki/OS_(API)
- os.pullEvent()の説明にて
Note that if a program has not attempted to pull an event in the past ten seconds, it will be forcefully terminated to prevent CPU waste in SMP environments.
え?10秒? これってまさか「Too long without yielding」エラーのこと言っている?
この記述だけだとよくわからないし、
自分でも正確に時間をはからず大体の時間で5秒なんて言っていたので、
エラー発生までの時間を正確に計ってみることにしました。
- 「Too long without yielding」エラー検証記事へのリンク
検証
プログラム
使ったプログラムは次のとおり。
local stime = os.clock() while true do print(os.clock() - stime) end
- プログラム起動時の経過時間を保存しておいて、あとは現在経過時間との差をひたすら画面表示するプログラム。
- os.clock()はそのコンピュータ(タートル)が起動してからの経過時間(秒)を表示
- os.clock()はcoroutine.yield()を含んでいないので順調に(?)エラーが発生します。
結果
念のため新規にワールドを作って(非クリエイティブ)、NEIチートでタートルを出して検証。
- 「Too long without yielding」エラー発生までの時間は5秒で間違いないようです。
公式Wikiの10秒ってこれ何のこと言っているのさ!!