Hi, I think I need some help on how to use coroutines or asyncCall.
I have an app using imgui that might be hanging here and there on older devices because it needs to load a bunch of entries from an sqlite db.
My goal would be to display something that moves/rotates/changes while those values load, but I am struggling already to understand how to manage this in the least invasive way (the app is working, I'd like to avoid rewriting a lot of stuff).
This pseudocode represent what happens now:
function sqliteload(query)
local stmt = {}
local output = {}
local db = sqlite3.open("|D|"..dbfilename)
stmt = db:prepare(query)
for data in stmt:nrows() do
output[#output+1] = data
end
return output
end
local List = {}
function drawWindow()
--imgui stuff to draw window and display the content of List
if ui:button("load list") then
List = sqliteload("SELECT * FROM stuff") --this is where the app might hang, therefore I'd like to call the loader just before this line and show it until I have a complete list from sqliteload().
end
end
function enterframe()
ui:newFrame(e.deltaTime)
drawWindow(ui)
ui:render()
ui:endFrame()
end |
How/where should I add my loader?
I thought I could use this approach
https://forum.giderosmobile.com/discussion/comment/56498/#Comment_56498Core.asyncCall(sqliteload) but I get an invalid argument (function expected, got table), and it makes sense since a table is what I am returning there.. so how do I do it?
Thank you
Comments
But you'll lose the result of your call. Your function should either set the result as a variable that will be picked up by your enter frame call once populated, or call a callback function with the result, etc.
EDIT: You can also do
Likes: pie