Difference between revisions of "Commands.execAsync"

From ComputerCraft Wiki
Jump to: navigation, search
m (Clarification on excessive command handling.)
(Bug fixed as of 1.76)
Line 6: Line 6:
 
|api=commands
 
|api=commands
 
|addon=ComputerCraft
 
|addon=ComputerCraft
|desc=Available only to [[Command Computer]]s, orders the specified [http://minecraft.gamepedia.com/Commands MineCraft command] to be executed, but doesn't [[os.pullEvent|yield]]. A [[task_complete_(event)|"task_complete"]] event will be queued once the command has actually been executed. You can use the <var>taskID</var> returned by this function to identify the "task_complete" event, should you wish to pull it. Compare [[commands.exec]], which automatically yields until this event is thrown, then catches it and returns the results.
+
|desc=Available only to [[Command Computer]]s, orders the specified [http://minecraft.gamepedia.com/Commands MineCraft command] to be executed, but doesn't [[os.pullEvent|yield]]. A [[task_complete_(event)|"task_complete"]] event will be queued once the command has actually been executed. You can use the <var>taskID</var> returned by this function to identify the "task_complete" event, should you wish to pull it. Compare [[commands.exec]], which automatically yields until this event is thrown, then catches it and returns the results.<br><br>
  
This function allows huge amounts of commands to be requested in a very short time - much faster than Minecraft can actually perform them. Generating an excessive queue will cause your script to error out.
+
This function allows huge amounts of commands to be requested in a very short time - much faster than Minecraft can actually perform them. Generating an excessive queue will cause your script to error out; to avoid problems, either perform periodic sleeps or measure incoming task_complete events (up to 256 events may exist within the event queue at a time; see [[os.pullEvent]]() for more info on the event system).
 
+
Furthermore, while commands are resolving ComputerCraft's event system is negatively affected - events (of all types) may randomly fail to make it into the event queue. The more commands in the command queue the less reliable the event queue becomes. (See [[os.pullEvent]]() for information concerning events.)
+
 
|examples=
 
|examples=
 
{{Example
 
{{Example

Revision as of 00:42, 26 December 2015


Grid Redstone.png  Function commands.execAsync
Available only to Command Computers, orders the specified MineCraft command to be executed, but doesn't yield. A "task_complete" event will be queued once the command has actually been executed. You can use the taskID returned by this function to identify the "task_complete" event, should you wish to pull it. Compare commands.exec, which automatically yields until this event is thrown, then catches it and returns the results.

This function allows huge amounts of commands to be requested in a very short time - much faster than Minecraft can actually perform them. Generating an excessive queue will cause your script to error out; to avoid problems, either perform periodic sleeps or measure incoming task_complete events (up to 256 events may exist within the event queue at a time; see os.pullEvent() for more info on the event system).
Syntax commands.execAsync(string command)
Returns number taskID
Part of ComputerCraft
API commands

Examples

Grid paper.png  Example
Says 'Hello' to the player, closest to the Command Computer.
Code
commands.execAsync( "say @p Hello" )



Grid paper.png  Example
Checks if there are any players around the Command Computer in 2 block radius.
Code
local radius = 2
local taskID = commands.execAsync( "testfor @a[r=" .. radius .. "]")

local arePlayersAround
repeat
  local event, id, success, executed, error = os.pullEvent( "task_complete" )
  
  arePlayersAround = success and executed
until id == taskID

if arePlayersAround then
  print( "There is one or more players around me." )
else
  print( "There are no players around me." )
end


Grid disk.png Commands API Functions
commands.exec - commands.execAsync - commands.list - commands.getBlockPosition - commands.getBlockInfo - commands.getBlockInfos