Create task.lua
This commit is contained in:
parent
438d29067f
commit
b88e761a6a
1 changed files with 60 additions and 0 deletions
60
src/apis/task.lua
Normal file
60
src/apis/task.lua
Normal file
|
@ -0,0 +1,60 @@
|
|||
local processList = {}
|
||||
local exit = false
|
||||
local autoExit = true
|
||||
local killProcesses = {}
|
||||
local pid = 0
|
||||
|
||||
function setAutoExit(val)
|
||||
autoExit = val
|
||||
end
|
||||
|
||||
function run()
|
||||
local firstRun = true
|
||||
while (function()
|
||||
local rtn = false
|
||||
for i, co in pairs(processList) do
|
||||
if coroutine.status(co) ~= "dead" then
|
||||
rtn = true
|
||||
end
|
||||
end
|
||||
return rtn
|
||||
end)() or not autoExit do
|
||||
if exit then
|
||||
break
|
||||
end
|
||||
local event = {}
|
||||
if not firstRun then
|
||||
event = {os.pullEventRaw()}
|
||||
end
|
||||
firstRun = false
|
||||
for k, co in pairs(processList) do
|
||||
if coroutine.status(co) ~= "dead" then
|
||||
coroutine.resume(co,unpack(event))
|
||||
end
|
||||
end
|
||||
for k, code in pairs(killProcesses) do
|
||||
processList[k] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function add(func)
|
||||
local co = coroutine.create(func)
|
||||
pid = pid + 1
|
||||
processList[pid] = co
|
||||
return tonumber(pid)
|
||||
end
|
||||
|
||||
function kill(pid)
|
||||
killProcesses[pid] = true
|
||||
end
|
||||
|
||||
function getList()
|
||||
p = 0
|
||||
for k,v in pairs(processList) do
|
||||
if v then
|
||||
p = p + 1
|
||||
end
|
||||
end
|
||||
return processList, p
|
||||
end
|
Loading…
Reference in a new issue