框架说明
Lua支持多任务的功能,开发者可以用最简单的方式,新建多个任务,而不是像传统的开发方式一样,只能用定时器进行延时。
当使用LuaTask框架时候,需要调用sys库,并且在代码最后一行,调用sys.run()以启动LuaTask框架,框架内的代码回在run()内运行。
框架示例
多任务
sys = require("sys")
--创建第一个
sys.taskInit(
function ()
while true do
sys.wait(1000)
print("task1 running\n")
end
end
)
--创建第二个
sys.taskInit(
function ()
while true do
sys.wait(2000)
print("task2 running\n")
end
end
)
sys.run()
多任务之间互相等待
sys = require("sys")
--第一个
sys.taskInit(
function ()
while true do
sys.wait(1000)
print("task1 running")
sys.publish("task1")
end
end
)
--第二个
sys.taskInit(
function ()
while true do
sys.waitUntil("task1")
print("take2 running")
end
end
)
--第三个
sys.taskInit(
function ()
while true do
local rekey = sys.waitUntil("task1", 200)
if rekey then
print("take3 running")
else
print("take3 ")
end
end
end
)
--回调函数
sys.subscribe("take1",
function()
print("subscribe running")
end
)
sys.run()
sys = require("sys")
--第一个
sys.taskInit(
function ()
while true do
sys.wait(1000)
print("task1 running")
sys.publish("task1")
end
end
)
--第二个
sys.taskInit(
function ()
while true do
sys.waitUntil("task1")
print("take2 running")
end
end
)
--第三个
sys.taskInit(
function ()
while true do
local rekey = sys.waitUntil("task1", 200)
if rekey then
print("take3 running")
else
print("take3 ")
end
end
end
)
--回调函数
sys.subscribe("take1",
function()
print("subscribe running")
end
)
sys.run()
多任务之间互相等待并传递数据
sys = require("sys")
--第一个
sys.taskInit(
function ()
takedate = "liustu"
while true do
sys.wait(1000)
print("task1 running")
sys.publish("task1", takedate)
end
end
)
--第二个
sys.taskInit(
function ()
while true do
local _,take2data = sys.waitUntil("task1")
print("take2 running ", take2data)
end
end
)
--第三个
sys.taskInit(
function ()
while true do
local rekey, take3data = sys.waitUntil("task1", 200)
if rekey then
print("take3 running ", take3data)
else
print("take3 ")
end
end
end
)
--回调函数
sys.subscribe("take1",
function(data)
print("subscribe running ", data)
end
)
sys.run()
传统定时器
sys = require("sys")
-- 定时器1s后执行某个函数
sys.timerStart(log.info, 1000, "定时器1s后执行某个函数")
sys.timerStart(
function()
log.info("定时器", "1s后执行某个函数")
end,
1000
)
-- 定时器循环执行
sys.timerLoopStart(log.info, 1000, "定时器循环执行")
sys.timerStart(
function()
sys.timerStop()
log.info("定时器停止")
end,
10000
)
sys.run()
sys库接口文档
sys.wait(ms)
Task任务延时函数,只能用于任务函数中,参数为延时的ms数,定时结束返回nil。
sys.waitUntil(id, ms)
Task任务的条件等待函数,包括等待事件消息或者定时器消息等条件,只能用于任务函数中。接收到消息返回true,超时返回false data接收到消息返回消息参数。
sys.waitUntilExt(id, ms)
Task任务的条件等待函数扩展。
sys.taskInit(fun, …)
创建一个任务线程,在模块最末行调用该函数并注册模块中的任务函数。
sys.timerStop(val, …)
关闭定时器。
sys.timerStopAll(fnc)
关闭同一回调函数的所有定时器。
sys.timerStart(fnc, ms, …)
开启一个定时器。
sys.timeLoopStart(fnc, ms)
开启循环定时器。
sys.timerIsActive(val, …)
判断某个定时器是否处于开启状态。
sys.subscribe(id, callback)
订阅消息,id为消息ID,callback为回调函数。
sys.unsubscibe(id, callback)
取消订阅消息。
sys.publish(…)
发布内部消息,存储在内部消息队列中。
sys.run()
run()从底层获取core消息并及时处理相关消息,查询定时器并调度各注册成功的任务线程运行和挂起。