56 lines
2.0 KiB
Markdown
56 lines
2.0 KiB
Markdown
You question yourself how you can execute your own logic while basalt is also active? There are multiple ways of doing that:
|
|
|
|
## Method 1:
|
|
Using parallel.waitForAll
|
|
|
|
````lua
|
|
local basalt = dofile("basalt.lua")
|
|
|
|
local mainFrame = basalt.createFrame("mainFrame"):show()-- lets create a frame and a button without functionality
|
|
mainFrame:addButton("aButton"):onClick(function() end):show()
|
|
|
|
local function yourCustomHandler()
|
|
while true do
|
|
-- add your logic here
|
|
os.sleep(1) -- you need something which calls coroutine.yield(), yes os.sleep does that os.pullEvent() aswell
|
|
end
|
|
end
|
|
|
|
parallel.waitForAll(basalt.autoUpdate, yourCustomHandler) -- here it will handle your function (yourCustomHandler) and basalts handlers at the time
|
|
````
|
|
You can read [here](http://www.computercraft.info/wiki/Parallel_(API)) what exactly parallel.waitForAll() does
|
|
|
|
## Method 2:
|
|
Using threads
|
|
|
|
````lua
|
|
local basalt = dofile("basalt.lua")
|
|
|
|
local mainFrame = basalt.createFrame("mainFrame"):show()-- lets create a frame, a button without functionality and a thread
|
|
mainFrame:addButton("aButton"):onClick(function() end):show()
|
|
local thread = mainFrame:addThread("customHandlerExecutingThread")
|
|
|
|
local function yourCustomHandler()
|
|
while true do
|
|
-- add your logic here
|
|
os.sleep(1) -- you need something which calls coroutine.yield(), yes os.sleep does that os.pullEvent() aswell
|
|
end
|
|
end
|
|
thread:start(yourCustomHandler) -- this will create a coroutine and starts the coroutine, os.sleep does the rest, so you just have to call start once.
|
|
````
|
|
|
|
## Method 3:
|
|
Using timers
|
|
|
|
````lua
|
|
local basalt = dofile("basalt.lua")
|
|
|
|
local mainFrame = basalt.createFrame("mainFrame"):show()-- lets create a frame, a button without functionality and a timer
|
|
mainFrame:addButton("aButton"):onClick(function() end):show()
|
|
local timer = mainFrame:addTimer("customHandlerExecutingTimer")
|
|
|
|
local function yourCustomHandler()
|
|
-- add your logic here
|
|
end
|
|
timer:onCall(yourCustomHandler):setTime(1, -1):start() -- this will call your function every second until you :cancel() the timer
|
|
```` |