4

こんにちは、lua スクリプトについて助けが必要です。サーバーのようなアプリケーション (無限ループ) を実行するスクリプトがここにあります。ここでの問題は、2 番目のコルーチンを実行しないことです。

何が悪いのか教えていただけませんか ありがとうございます。

function startServer()
    print( "...Running server" )
    --run a server like application infinite loop
    os.execute( "server.exe" ) 
end
function continue()
    print("continue")
end

co = coroutine.create( startServer() )
co1 = coroutine.create( continue() )
4

3 に答える 3

3

既に述べたように、スクリプトには、必要なものを取得できないいくつかの問題があります。

  • os.execute("...")コマンドが完了するまでブロックされ、あなたの場合は完了しません(無限ループを実行するため)。解決策:io.popen()代わりに次のようなものを使用して、そのプロセスを自分のものから切り離す必要がありますos.execute()
  • co = coroutine.create( startServer() )あなたの場合、コルーチンを作成しません。call は関数参照を受け入れ、 callcoroutine.createの結果である を渡します。解決策:使用します(括弧が削除されているため、関数呼び出しではないことに注意してください)。startServernilco = coroutine.create( startServer )
  • コルーチンから譲歩していません。複数のコルーチンを連携させたい場合は、必要に応じて相互に制御を与えることで連携する必要があります。それが command の目的であり、それがnon-preemptive multithreadingyieldと呼ばれる理由です。解決策:コルーチンの後にとの呼び出しを組み合わせて使用​​する必要があります。resumeyieldcreate
  • startServer制御を戻していないため、コルーチンである必要はありません。その唯一の目的は、サーバーを起動することです。

あなたの場合、ソリューションはコルーチンを必要としないかもしれません: (1) サーバーを起動し、プロセスから切り離し (たとえば、 を使用popen)、(2) 任意の通信プロトコルを使用してプロセスを操作するだけです。必要です (パイプ、ソケットなど)。

より複雑で完全なソリューション ( LuaLanes など) と、単純なコルーチン ディスパッチャの作成に関する適切な説明がいくつかあります。

于 2013-09-23T16:36:01.527 に答える