Difference between revisions of "Parallel.waitForAll"

From ComputerCraft Wiki
Jump to: navigation, search
(Some attempts at clarification.)
m (Fixed)
 
Line 1: Line 1:
 
{{Function
 
{{Function
 
|name=parallel.waitForAll
 
|name=parallel.waitForAll
|args= function1, function2, so on
+
|args= {{type|function}} function1, {{type|function}} function2, ...
|returns = ?
+
|returns=None
 
|api=parallel
 
|api=parallel
 
|addon=ComputerCraft
 
|addon=ComputerCraft
|desc=Lets you run multiple functions at the same time, alternating between them until all have finished. Note that it takes ''function names'' as parameters (eg "function1", "function2", etc), as opposed to ''function calls'' (eg "function1()", "function2()", etc).<br><br>
+
|desc=Lets you run multiple functions at the same time, alternating between them until all have finished. Note that it takes ''function names'' as parameters (eg "function1", "function2", etc), as opposed to ''function calls'' (eg "function1()", "function2()", etc).
 
+
The functions are not actually executed simultaniously, but rather this API will automatically switch between them whenever they yield (eg whenever they call [[Coroutine.yield|coroutine.yield()]], or functions that call that - eg [[Os.pullEvent|os.pullEvent()]] - or functions that call ''that'', etc - basically, anything that causes the function to "pause").<br><br>
+
 
+
Each function executed in "parallel" gets its own copy of the event queue, and so "event consuming" functions (again, most anything that causes the script to pause - eg [[Os.sleep|sleep()]], [[Rednet.receive|rednet.receive()]], most of the [[Turtle_(API)|turtle API]], etc) can safely be used in one without affecting the event queue accessed by the other.
+
 
|examples=
 
|examples=
 
{{Example
 
{{Example
 
|desc=Tells the computer to run function1 and function2 at the same time. Will broadcast what the user enters and prints what it receives over rednet. It will stop when it has received a message ''and'' the user has entered something.
 
|desc=Tells the computer to run function1 and function2 at the same time. Will broadcast what the user enters and prints what it receives over rednet. It will stop when it has received a message ''and'' the user has entered something.
|code=function1 = [[Function (type)|function]]() -- Define function1.
+
|code=local function receive () -- Define the first function.
   [[print]] ([[rednet.receive]]())
+
   [[print]]([[rednet.receive]]())
 
  end
 
  end
 
   
 
   
  [[Function (type)|function]] function2()  -- Define function2.
+
  local function send ()  -- Define the second function.
   [[rednet.broadcast]] ([[read]]())
+
   [[rednet.broadcast]]([[read]]())
 
  end
 
  end
 
   
 
   
  parallel.waitForAny (function1, function2)  -- Run both functions in parallel until both complete.
+
  '''parallel.waitForAll(receive, send)''' -- Run both functions in parallel and wait until both of them completes.
 
|output=Prints what it received via rednet and broadcasts the message the user typed.
 
|output=Prints what it received via rednet and broadcasts the message the user typed.
 
}}
 
}}

Latest revision as of 18:10, 10 April 2014

Grid Redstone.png  Function parallel.waitForAll
Lets you run multiple functions at the same time, alternating between them until all have finished. Note that it takes function names as parameters (eg "function1", "function2", etc), as opposed to function calls (eg "function1()", "function2()", etc).
Syntax parallel.waitForAll(function function1, function function2, ...)
Returns None
Part of ComputerCraft
API parallel

Examples

Grid paper.png  Example
Tells the computer to run function1 and function2 at the same time. Will broadcast what the user enters and prints what it receives over rednet. It will stop when it has received a message and the user has entered something.
Code
local function receive () -- Define the first function.
 print(rednet.receive())
end

local function send ()  -- Define the second function.
 rednet.broadcast(read())
end

parallel.waitForAll(receive, send)  -- Run both functions in parallel and wait until both of them completes.
Output Prints what it received via rednet and broadcasts the message the user typed.