この項目の情報は古いものです。
Lua5.1では関数の仕様が変更され、lua_resumeの返値のみで判断することが出来るようになっています。
http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html
243 名前:デフォルトの名無しさん[sage] 投稿日:04/02/20(金) 10:52
lua_resumeが0以外で帰ってきて、スタックが1つだけ詰まれててそれが文字列で、
・その文字列が"cannot resume"を含まなければ、スクリプト実行エラー
・そうでなければ、既に実行が終わったものをlua_resumeしようとした時のエラー
とかしてる。もっとうまい方法あるかな?
lua_resumeが正常終了した後、もう一度lua_resumeを呼べるかどうかを調べる方法は、
ソースを見る限りなさゲ?(もう調べたころの記憶が曖昧だけど…)
348 名前:デフォルトの名無しさん[sage] 投稿日:04/08/26(木) 03:16
243
lua_resumeが正常終了した後、もう一度lua_resumeを呼べるかどうかを調べる方法
lbaselib.cのluaB_costatus()参照
lua_Debug ar;
if (lua_getstack(co, 0, &ar) == 0 && lua_gettop(co) == 0)
/* terminated */;
else
/* alive */;
個人的にはもっと簡便にlua_resume(L, ...)呼ぶ前に
lua_gettop(L) == 0 ならコルーチン終了してる
ってコーディングしてるけど今までのところ問題ない