跳转至

sys - sys库

{bdg-success}已适配 {bdg-primary}Air780E {bdg-primary}Air780EP {bdg-primary}Air780EPS {bdg-primary}Air780EQ {bdg-primary}Air700EAQ {bdg-primary}Air700EMQ {bdg-primary}Air700ECQ {bdg-primary}Air201

本页文档由[这个文件](https://gitee.com/openLuat/LuatOS/tree/master/luat/modules/luat_lib_sys_doc.c)自动生成。如有错误,请提交issue或帮忙修改后pr,谢谢!
本库还有视频教程,[点此链接查看](https://www.bilibili.com/video/BV1194y1o7q2)

sys.wait(timeout)

Task协程等待指定时长

参数

传入值类型 解释
int 等待时长,单位毫秒,必须大于0,否则无效

返回值

返回值类型 解释
any 通常为nil,除非主动被唤醒(通常不会)

例子

sys.taskInit(function()
    while 1 do
        sys.wait(500)
    end
end)

sys.waitUntil(topic, timeout)

Task协程等待指定时长或者特定的topic

参数

传入值类型 解释
string 事件topic
int 等待时长,单位毫秒,必须大于0,否则无效

返回值

返回值类型 解释
boolean 如果是超时,返回false,否则返回true
any 对应topic的内容

例子

sys.taskInit(function()
    // do something
    local result, data = sys.waitUntil("NET_READY", 30000)
    // do something else
end)

sys.taskInit(func, arg1, arg2, argN)

创建一个Task协程

参数

传入值类型 解释
function 待执行的函数,可以是匿名函数, 也可以是local或全局函数
any 需要传递的参数1,可选
any 需要传递的参数2,可选
any 需要传递的参数N,可选

返回值

返回值类型 解释
task 协程对象

例子

sys.taskInit(function(a, b, c)
    log.info("task", a, b, c) -- 打印 task A B C
end, "A", "B", "N")

sys.timerStart(func, timeout, arg1, arg2, argN)

创建一个定时器.非Task,函数里不能直接sys.waitXXX

参数

传入值类型 解释
function 待执行的函数,可以是匿名函数, 也可以是local或全局函数
int 延时时长,单位毫秒
any 需要传递的参数1,可选
any 需要传递的参数2,可选
any 需要传递的参数N,可选

返回值

返回值类型 解释
int 定时器id

例子

sys.timerStart(function(a, b, c)
    log.info("task", a, b, c) -- 1000毫秒后才会执行, 打印 task A B C
end, 1000, "A", "B", "N")

sys.timerLoopStart(func, timeout, arg1, arg2, argN)

创建一个循环定时器.非Task,函数里不能直接sys.waitXXX

参数

传入值类型 解释
function 待执行的函数,可以是匿名函数, 也可以是local或全局函数
int 延时时长,单位毫秒
any 需要传递的参数1,可选
any 需要传递的参数2,可选
any 需要传递的参数N,可选

返回值

返回值类型 解释
int 定时器id

例子

sys.timerLoopStart(function(a, b, c)
    log.info("task", a, b, c) -- 1000毫秒后才会执行, 打印 task A B C
end, 1000, "A", "B", "N")

sys.timerStop(id)

关闭一个定时器.

参数

传入值类型 解释
int 定时器id

返回值

返回值类型 解释
nil 无返回值

例子

local tcount = 0
local tid 
tid = sys.timerLoopStart(function(a, b, c)
    log.info("task", a, b, c) -- 1000毫秒后才会执行, 打印 task A B C
    if tcount > 10 then
        sys.timerStop(tid)
    end
    tcount = tcount + 1
end, 1000, "A", "B", "N")

sys.timerStopAll(fnc)

关闭同一回调函数的所有定时器.

参数

传入值类型 解释
function fnc回调的函数

返回值

返回值类型 解释
nil 无返回值

例子

-- 关闭回调函数为publicTimerCbFnc的所有定时器
local function publicTimerCbFnc(tag)
log.info("publicTimerCbFnc",tag)
end
sys.timerStart(publicTimerCbFnc,8000,"first")
sys.timerStart(publicTimerCbFnc,8000,"second")
sys.timerStart(publicTimerCbFnc,8000,"third")
sys.timerStopAll(publicTimerCbFnc)

sys.publish(topic, arg1, agr2, argN)

往特定topic通道发布一个消息

参数

传入值类型 解释
string topic的值
any 附带的参数1
any 附带的参数2
any 附带的参数N

返回值

返回值类型 解释
nil 无返回值

例子

sys.publish("BT_READY", false)

sys.subscribe(topic, func)

订阅一个topic通道

参数

传入值类型 解释
string topic的值
function 回调函数, 注意, 不能直接使用sys.waitXXX

返回值

返回值类型 解释
nil 无返回值

例子

local function bt_cb(state)
    log.info("bt", state)
end
sys.subscribe("BT_READY", bt_cb)
sys.subscribe("BT_READY", function(state)
    log.info("sys", "Got BT_READY", state)
end)

sys.unsubscribe(topic, func)

取消订阅topic通道

参数

传入值类型 解释
string topic的值
function 回调函数, 注意, 不能直接使用sys.waitXXX

返回值

返回值类型 解释
nil 无返回值

例子

local function bt_cb(state)
    log.info("bt", state)
end
sys.unsubscribe("BT_READY", bt_cb)

sys.run()

sys库主循环方法,仅允许在main.lua的末尾调用

参数

返回值

返回值类型 解释
nil 无返回值. 这个方法几乎不可能返回.

例子

-- 总是main.lua的结尾一句,将来也许会简化掉
sys.run()
-- 之后的代码不会被执行