API > Parallel


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

このページでは Parallel API について解説する。

参考資料:
執筆時のバージョン:
  • ComputerCraft 1.55 for Minecraft 1.6.2




Parallel API

複数の関数を同時に実行する。

便宜上「同時に実行」としているが、Coroutine APIで実装されているため、厳密には一つずつ順番に実行されている。

コルーチン化された各関数の処理を次から次へと切り替えるには、それぞれの関数内でcoroutine.yeild関数を呼び出す必要がある。また、直接coroutine.yeild関数を呼び出す代わりに、os.pullEvent関数やos.pullEventRaw関数、sleep関数、read関数、rednet.receive関数、gps.locate関数、turtle APIの各関数など、処理の過程でcoroutine.yeild関数を呼び出している関数を呼び出しても良い。実行中のコルーチンでcoroutine.yeild関数が呼び出されない時間が5秒間続くと"Too long without yielding"となり、強制的に処理が中断される。

処理のマルチタスク化を助けるAPIではあるが、マルチタスクを実現するためには意識してプログラミングする必要がある。

assets\computercraft\lua\rom\apis\parallel で定義

waitForAny

  • parallel.waitForAny( function1 , function2 [, ... ] )
  • function1 , function2 , ...(関数型)を同時に実行し、どれか一つが終了するまで待つ。
  • 戻り値:数値型。最初に終了した関数の引数での順番(1以上の整数)

関数がどれか一つが終了したら、他の関数の処理は中断される。

例:
function1 = function()
  print( rednet.receive() )
end

function2 = function()
  rednet.broadcast( read() )
end

parallel.waitForAny( function1, function2 )
Rednet通信を受信して画面へ表示する関数(function1)と、入力した文章をRednet通信で送信する関数(function2)を同時に実行し、どちらかが終了するまで待つ。

waitForAll

  • parallel.waitForAll( function1 , function2 [, ... ] )
  • function1 , function2 , ...(関数型)を同時に実行し、すべて終了するまで待つ。
  • 戻り値:nil

例:
function1 = function()
  print( rednet.receive() )
end

function2 = function()
  rednet.broadcast( read() )
end

parallel.waitForAll( function1, function2 )
waitForAnyの例では受信と送信のいずれかが行われた時点で終了するのに対して、こちらは受信と送信がそれぞれ一回ずつ行われない限り終了しない。