Difference between revisions of "Core.asyncCall"

From GiderosMobile
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 +
__NOTOC__
 
'''Available since:''' Gideros 2016.06<br/>
 
'''Available since:''' Gideros 2016.06<br/>
 
'''Class:''' [[Core]]<br/>
 
'''Class:''' [[Core]]<br/>
Line 4: Line 5:
 
=== Description ===
 
=== Description ===
 
Launches a function on a separate thread as a background task.
 
Launches a function on a separate thread as a background task.
<source lang="lua">
+
<syntaxhighlight lang="lua">
 
Core.asyncCall(task,parameters)
 
Core.asyncCall(task,parameters)
</source>
+
</syntaxhighlight>
  
 
Background threads are only executed when the main thread is not running.
 
Background threads are only executed when the main thread is not running.
Line 13: Line 14:
 
'''task''': (function) function to run in background<br/>
 
'''task''': (function) function to run in background<br/>
 
'''parameters''': (multiple) multiple parameters to pass to function '''optional'''<br/>
 
'''parameters''': (multiple) multiple parameters to pass to function '''optional'''<br/>
 +
 +
----
 +
 +
'''Available since:''' Gideros 2025.3<br/>
 +
'''Class:''' [[Core]]<br/>
 +
 +
=== Description ===
 +
In Gideros 2025.3, Core.asyncCall has been modified to allow disabling the autoyield function on creation (previously it was always on). To do so, it now accepts an optional boolean as first argument to tell if auto yielding should be enabled or not. If present, the function to call and its arguments are passed in parameters 2 and beyond.
 +
<syntaxhighlight lang="lua">
 +
Core.asyncCall(autoyield,task,parameters)
 +
</syntaxhighlight>
 +
 +
Background threads are only executed when the main thread is not running.
 +
 +
=== Parameters ===
 +
'''autoyield''': (boolean) enable/disable autoyield function on creation, '''default, autoYield = true'''<br/>
 +
'''task''': (function) function to run in background<br/>
 +
'''parameters''': (multiple) multiple parameters to pass to function '''optional'''<br/>
 +
 +
----
  
 
=== Examples ===
 
=== Examples ===
<source lang="lua">
+
<syntaxhighlight lang="lua">
 +
local txt1_noads = TextField.new(nil, "no ads")
 +
local txt2_plusincome = TextField.new(nil, "plus income")
 +
local btn_OK = TextField.new(nil, "OK")
 +
-- position
 +
txt1_noads:setPosition(64, 64*1)
 +
txt2_plusincome:setPosition(64, 64*3)
 +
btn_OK:setPosition(64, 64*5)
 +
-- scale
 +
local FontScale = 4
 +
local tempFontScale = 8
 +
txt1_noads:setScale(FontScale)
 +
txt2_plusincome:setScale(FontScale)
 +
btn_OK:setScale(FontScale)
 +
-- order
 +
stage:addChild(txt1_noads)
 +
stage:addChild(txt2_plusincome)
 +
stage:addChild(btn_OK)
 +
 
 
local function scaleTextsAndBtn()
 
local function scaleTextsAndBtn()
local tempFontScale=1.02
+
Core.yield(2)
 
 
Core.yield(.2)
 
 
txt1_noads:setScale(tempFontScale)
 
txt1_noads:setScale(tempFontScale)
Core.yield(.1)
+
Core.yield(1)
txt1_noads:setScale(1)
+
txt1_noads:setScale(FontScale)
  
 +
Core.yield(1)
 
txt2_plusincome:setScale(tempFontScale)
 
txt2_plusincome:setScale(tempFontScale)
Core.yield(.1)
+
Core.yield(1)
txt2_plusincome:setScale(1)
+
txt2_plusincome:setScale(FontScale)
  
Core.yield(.1)
+
Core.yield(1)
btn_OK:setScale(1.04)
+
btn_OK:setScale(tempFontScale)
Core.yield(.2)
+
Core.yield(0.5)
btn_OK:setScale(1)
+
btn_OK:setScale(FontScale)
 
end
 
end
 
   
 
   
 
Core.asyncCall(scaleTextsAndBtn)
 
Core.asyncCall(scaleTextsAndBtn)
</source>
+
</syntaxhighlight>
  
 
'''asyncCall used in a Class and with parameters'''
 
'''asyncCall used in a Class and with parameters'''
<source lang="lua">
+
<syntaxhighlight lang="lua">
 
if self.imgui:button("VALIDATE") then
 
if self.imgui:button("VALIDATE") then
 
-- self:gotoScene("levelX")
 
-- self:gotoScene("levelX")
Line 53: Line 91:
 
)
 
)
 
end
 
end
</source>
+
</syntaxhighlight>
 +
 
 +
=== See also ===
 +
'''[[Core.yield]]'''
  
 
{{Core}}
 
{{Core}}

Latest revision as of 00:09, 26 March 2025

Available since: Gideros 2016.06
Class: Core

Description

Launches a function on a separate thread as a background task.

Core.asyncCall(task,parameters)

Background threads are only executed when the main thread is not running.

Parameters

task: (function) function to run in background
parameters: (multiple) multiple parameters to pass to function optional


Available since: Gideros 2025.3
Class: Core

Description

In Gideros 2025.3, Core.asyncCall has been modified to allow disabling the autoyield function on creation (previously it was always on). To do so, it now accepts an optional boolean as first argument to tell if auto yielding should be enabled or not. If present, the function to call and its arguments are passed in parameters 2 and beyond.

Core.asyncCall(autoyield,task,parameters)

Background threads are only executed when the main thread is not running.

Parameters

autoyield: (boolean) enable/disable autoyield function on creation, default, autoYield = true
task: (function) function to run in background
parameters: (multiple) multiple parameters to pass to function optional


Examples

local txt1_noads = TextField.new(nil, "no ads")
local txt2_plusincome = TextField.new(nil, "plus income")
local btn_OK = TextField.new(nil, "OK")
-- position
txt1_noads:setPosition(64, 64*1)
txt2_plusincome:setPosition(64, 64*3)
btn_OK:setPosition(64, 64*5)
-- scale
local FontScale = 4
local tempFontScale = 8
txt1_noads:setScale(FontScale)
txt2_plusincome:setScale(FontScale)
btn_OK:setScale(FontScale)
-- order
stage:addChild(txt1_noads)
stage:addChild(txt2_plusincome)
stage:addChild(btn_OK)

local function scaleTextsAndBtn()
	Core.yield(2)
	txt1_noads:setScale(tempFontScale)
	Core.yield(1)
	txt1_noads:setScale(FontScale)

	Core.yield(1)
	txt2_plusincome:setScale(tempFontScale)
	Core.yield(1)
	txt2_plusincome:setScale(FontScale)

	Core.yield(1)
	btn_OK:setScale(tempFontScale)
	Core.yield(0.5)
	btn_OK:setScale(FontScale)
end
 
Core.asyncCall(scaleTextsAndBtn)

asyncCall used in a Class and with parameters

	if self.imgui:button("VALIDATE") then
--		self:gotoScene("levelX")
		Core.asyncCall(LevelX.gotoScene, self, "levelX") -- or self.gotoScene, ...
	end
...

-- change scene
function LevelX:gotoScene(xscene)
	scenemanager:changeScene(
		xscene, 1,
		transitions[math.random(1, #transitions)],
		easings[math.random(1, #easings)]
	)
end

See also

Core.yield