当使用LuaTask框架时,需要在代码中引用sys
库(_G.sys=require("sys")
),并且在代码的最后一行,调用sys.run()
以启动LuaTask框架,框架内的任务代码会在sys.run()
中运行。
多任务
sys = require("sys")
--第一个任务
sys.taskInit(function()
while true do
log.info("task1","wow")
sys.wait(1000) --延时1秒,这段时间里可以运行其他代码
end
end)
--第二个任务
sys.taskInit(function()
while true do
log.info("task2","wow")
sys.wait(500) --延时0.5秒,这段时间里可以运行其他代码
end
end)
sys.run()
多任务之间互相等待
sys = require("sys")
--第一个任务
sys.taskInit(function()
while true do
log.info("task1","wow")
sys.wait(1000) --延时1秒,这段时间里可以运行其他代码
sys.publish("TASK1_DONE")--发布这个消息,此时所有在等的都会收到这条消息
end
end)
--第二个任务
sys.taskInit(function()
while true do
sys.waitUntil("TASK1_DONE")--等待这个消息,这个任务阻塞在这里了
log.info("task2","wow")
end
end)
--第三个任务
sys.taskInit(function()
while true do
local result = sys.waitUntil("TASK1_DONE",500)--等待超时时间500ms,超过就返回false而且不等了
log.info("task3","wait result",result)
end
end)
--单独订阅,可以当回调来用
sys.subscribe("TASK1_DONE",function()
log.info("subscribe","wow")
end)
sys.run()
多任务之间互相等待并传递数据
sys = require("sys")
--第一个任务
sys.taskInit(function()
while true do
log.info("task1","wow")
sys.wait(1000) --延时1秒,这段时间里可以运行其他代码
sys.publish("TASK1_DONE","balabala")--发布这个消息,并且带上一个数据
end
end)
--第二个任务
sys.taskInit(function()
while true do
local _,data = sys.waitUntil("TASK1_DONE")--等待这个消息,这个任务阻塞在这里了
log.info("task2","wow receive",data)
end
end)
--第三个任务
sys.taskInit(function()
while true do
local result,data = sys.waitUntil("TASK1_DONE",500)--等待超时时间500ms,超过就返回false而且不等了
log.info("task3","wait result",result,data)
end
end)
--单独订阅,可以当回调来用
sys.subscribe("TASK1_DONE",function(data)
log.info("subscribe","wow receive",data)
end)
sys.run()
传统定时器
sys = require("sys")
--第一个任务
sys.taskInit(function()
while true do
log.info("task1","wow")
sys.wait(1000) --延时1秒,这段时间里可以运行其他代码
sys.publish("TASK1_DONE")--发布这个消息,此时所有在等的都会收到这条消息
end
end)
--第二个任务
sys.taskInit(function()
while true do
sys.waitUntil("TASK1_DONE")--等待这个消息,这个任务阻塞在这里了
log.info("task2","wow")
end
end)
--第三个任务
sys.taskInit(function()
while true do
local result = sys.waitUntil("TASK1_DONE",500)--等待超时时间500ms,超过就返回false而且不等了
log.info("task3","wait result",result)
end
end)
--单独订阅,可以当回调来用
sys.subscribe("TASK1_DONE",function()
log.info("subscribe","wow")
end)
sys.run()