「API/Parallel」の編集履歴(バックアップ)一覧はこちら
「API/Parallel」(2014/01/01 (水) 13:04:38) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
このページでは Parallel API について解説する。
参考資料:
-[[Parallel API>http://computercraft.info/wiki/Parallel_%28API%29]]
執筆時のバージョン:
-ComputerCraft 1.55 for Minecraft 1.6.2
----
#contents
----
*Parallel API
複数の関数を同時に実行する。
便宜上「同時に実行」としているが、[[Coroutine API>API/Coroutine]]で実装されているため、厳密には一つずつ順番に実行されている。
コルーチン化された各関数の処理を次から次へと切り替えるには、それぞれの関数内で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( &italic(){function1} , &italic(){function2} [, &italic(){...} ] )
-&italic(){function1} , &italic(){function2} , &italic(){...}(関数型)を同時に実行し、どれか一つが終了するまで待つ。
-戻り値:数値型。最初に終了した関数の引数での順番(1以上の整数)
関数がどれか一つが終了したら、他の関数の処理は中断される。
例:
function1 = function()
print( rednet.receive() )
end
function2 = function()
rednet.broadcast( read() )
end
parallel.waitForAny( function1, function2 )
Rednet通信を受信して画面へ表示する関数(function1)と、入力した文章をRednet通信で送信する関数(function2)を同時に実行し、どちらかが終了するまで待つ。
**waitForAll
-parallel.waitForAll( &italic(){function1} , &italic(){function2} [, &italic(){...} ] )
-&italic(){function1} , &italic(){function2} , &italic(){...}(関数型)を同時に実行し、すべて終了するまで待つ。
-戻り値:nil
例:
function1 = function()
print( rednet.receive() )
end
function2 = function()
rednet.broadcast( read() )
end
parallel.waitForAll( function1, function2 )
waitForAnyの例では受信と送信のいずれかが行われた時点で終了するのに対して、こちらは受信と送信がそれぞれ一回ずつ行われない限り終了しない。
このページでは Parallel API について解説する。
参考資料:
-[[Parallel API>http://computercraft.info/wiki/Parallel_%28API%29]]
執筆時のバージョン:
-ComputerCraft 1.55 for Minecraft 1.6.2
----
#contents
----
*Parallel API
複数の関数を同時に実行する。
便宜上「同時に実行」としているが、[[Coroutine API>API/Coroutine]]で実装されているため、厳密には一つずつ順番に実行されている。
コルーチン化された各関数の処理を次から次へと切り替えるには、それぞれの関数内で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( &italic(){function1} , &italic(){function2} [, &italic(){...} ] )
-&italic(){function1} , &italic(){function2} , &italic(){...}(関数型)を同時に実行し、どれか一つが終了するまで待つ。
-戻り値:数値型。最初に終了した関数の引数での順番(1以上の整数)
関数がどれか一つが終了したら、他の関数の処理は中断される。
例:
function1 = function()
print( rednet.receive() )
end
function2 = function()
rednet.broadcast( read() )
end
parallel.waitForAny( function1, function2 )
Rednet通信を受信して画面へ表示する関数(function1)と、入力した文章をRednet通信で送信する関数(function2)を同時に実行し、どちらかが終了するまで待つ。
**waitForAll
-parallel.waitForAll( &italic(){function1} , &italic(){function2} [, &italic(){...} ] )
-&italic(){function1} , &italic(){function2} , &italic(){...}(関数型)を同時に実行し、すべて終了するまで待つ。
-戻り値:nil
例:
function1 = function()
print( rednet.receive() )
end
function2 = function()
rednet.broadcast( read() )
end
parallel.waitForAll( function1, function2 )
waitForAnyの例では受信と送信のいずれかが行われた時点で終了するのに対して、こちらは受信と送信がそれぞれ一回ずつ行われない限り終了しない。