Difference between revisions of "spawn"

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "\[\[Category:[ _]?Scripting[ _]Commands[ _]OFP[ _]Elite *(\|.*)?\]\]" to "{{GameCategory|ofpe|Scripting Commands}}")
m (Text replacement - "_{10,} " to "")
Line 1: Line 1:
 
{{Command|Comments=
 
{{Command|Comments=
____________________________________________________________________________________________
 
  
 
| arma1 |Game name=
 
| arma1 |Game name=
Line 9: Line 8:
  
 
|1.00|Game version=
 
|1.00|Game version=
____________________________________________________________________________________________
 
  
 
| Adds given set of compiled instructions to the [[Scheduler|scheduler]]. Exactly when the code will be executed is unknown, it depends on how busy is the engine and how filled up is the [[Scheduler|scheduler]]. Therefore [[spawn]] does not wait for the supplied code to finish, instead, [[spawn]] returns a [[Script (Handle)|Script]] handle to the [[Scheduler|scheduler]] task. [[scriptDone]] command can be used to check the code completion. Additional arguments are passed to the code in local variable [[_this]]. Since Arma 3 v1.55 the script handle also exists inside the code in <tt>_thisScript</tt> variable. To see what spawned scripts are currently in the scheduler, use [[diag_activeSQFScripts]] command.<br><br>
 
| Adds given set of compiled instructions to the [[Scheduler|scheduler]]. Exactly when the code will be executed is unknown, it depends on how busy is the engine and how filled up is the [[Scheduler|scheduler]]. Therefore [[spawn]] does not wait for the supplied code to finish, instead, [[spawn]] returns a [[Script (Handle)|Script]] handle to the [[Scheduler|scheduler]] task. [[scriptDone]] command can be used to check the code completion. Additional arguments are passed to the code in local variable [[_this]]. Since Arma 3 v1.55 the script handle also exists inside the code in <tt>_thisScript</tt> variable. To see what spawned scripts are currently in the scheduler, use [[diag_activeSQFScripts]] command.<br><br>
 
{{Warning| When multiple [[Code]] is [[spawn]]ed in an order, there is <u>no guarantee</u> that the [[spawn]]ed [[Code]] will also execute in the same order. If you need such guarantee, use [[BIS_fnc_spawnOrdered]] function}}|DESCRIPTION=
 
{{Warning| When multiple [[Code]] is [[spawn]]ed in an order, there is <u>no guarantee</u> that the [[spawn]]ed [[Code]] will also execute in the same order. If you need such guarantee, use [[BIS_fnc_spawnOrdered]] function}}|DESCRIPTION=
____________________________________________________________________________________________
 
  
 
| arguments '''spawn''' code |SYNTAX=
 
| arguments '''spawn''' code |SYNTAX=
Line 22: Line 19:
  
 
| [[Script_(Handle)|Script Handle]] - can be used to determine (via [[scriptDone]] (also via [[isNull]] in Arma 3)) when the spawned script has finished. In Arma 3, the handle is also available inside the spawned script in <tt>_thisScript</tt> variable. |RETURNVALUE=
 
| [[Script_(Handle)|Script Handle]] - can be used to determine (via [[scriptDone]] (also via [[isNull]] in Arma 3)) when the spawned script has finished. In Arma 3, the handle is also available inside the spawned script in <tt>_thisScript</tt> variable. |RETURNVALUE=
____________________________________________________________________________________________
 
 
   
 
   
  
____________________________________________________________________________________________
 
 
   
 
   
 
|x1= <code>_handle = [] [[spawn]] {[[player]] [[globalChat]] "Hello world!"};</code> |EXAMPLE1=
 
|x1= <code>_handle = [] [[spawn]] {[[player]] [[globalChat]] "Hello world!"};</code> |EXAMPLE1=
Line 38: Line 33:
 
};</code>
 
};</code>
 
// Result: 51,1,2...49,50,0,52,53...100 |EXAMPLE2=
 
// Result: 51,1,2...49,50,0,52,53...100 |EXAMPLE2=
____________________________________________________________________________________________
 
  
 
| [[call]], [[execVM]], [[execFSM]], [[exec]], [[compile]], [[preprocessFileLineNumbers]], [[preprocessFile]], [[terminate]], [[scriptDone]], [[remoteExec]], [[sleep]], [[uiSleep]], [[canSuspend]] |SEEALSO=
 
| [[call]], [[execVM]], [[execFSM]], [[exec]], [[compile]], [[preprocessFileLineNumbers]], [[preprocessFile]], [[terminate]], [[scriptDone]], [[remoteExec]], [[sleep]], [[uiSleep]], [[canSuspend]] |SEEALSO=

Revision as of 03:55, 17 January 2021

Template:Command

Notes

Posted on 5 March, 2009
Kronzky
spawn cannot call other local functions on the same scope as itself.
It can, however, call other global functions: _addOne = {TST=TST+1}; TST_addOne = {TST=TST+1}; _add = { TST=TST+1; player sideChat format ["added: %1",TST]; [] call _addOne; player sideChat format ["called local: %1",TST]; [] call TST_addOne; player sideChat format ["called global: %1",TST]; }; TST=0; [] call _add; [] spawn _add; The call of _addOne from the spawned function does not do anything.

Bottom Section


Posted on October 21, 2014 - 23:33 (UTC)
DreadedEntity
spawn requires a script handle when used in the 2D editor. (A3)
In scripts and in the debug console, it is not required, but very useful for keeping track of running scripts. Having a script handle also makes it easy to terminate scripts at any time.

Since spawn creates a new scheduled environment, having an excess of open threads can make the scheduler queue extremely long, significantly increasing the execution time of each thread. (it takes an extremely large amount of threads, though)
Posted on August 25, 2015 - 13:39 (UTC)
IT07
If you want to call a local function which has NOT been created inside a spawned function, then do this: _fncOne = { systemChat"This is _fncOne" }; _fncTwo = { call (_this select 0) }; [_fncOne] spawn _fncTwo;