LuatOS入门指南5-LuaTask框架 多任务实践

一,sys库接口函数

  1. sys.wait(ms) ~Task任务延时函数,只能用于任务函数中
  2. sys.waitUntil(id, ms) ~Task任务的条件等待函数(包括事件消息和定时器消息等条件),只能用于任务函数中。
  3. sys.waitUntilExt(id, ms) ~Task任务的条件等待函数扩展(包括事件消息和定时器消息等条件),只能用于任务函数中。
  4. sys.taskInit(fun, …) ~创建一个任务线程,在模块最末行调用该函数并注册模块中的任务函数,main.lua导入该模块即可
  5. sys.timerStop(val, …)~关闭定时器
  6. sys.timerStopAll(fnc)~关闭同一回调函数的所有定时器
  7. sys.timerStart(fnc, ms, …)~开启一个定时器
  8. sys.timerLoopStart(fnc, ms, …)~开启一个循环定时器
  9. sys.timerIsActive(val, …)~判断某个定时器是否处于开启状态
  10. sys.subscribe(id, callback)~订阅消息
  11. sys.unsubscribe(id, callback)~取消订阅消息
  12. sys.publish(…)~发布内部消息,存储在内部消息队列中
  13. sys.run()~run()从底层获取core消息并及时处理相关消息,查询定时器并调度各注册成功的任务线程运行和挂起
    具体函数使用参考官方文档

二,实验代码

-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "Test"
VERSION = "1.0.0"

-- 打印版本信息
log.info("main", PROJECT, VERSION)

-- 一定要添加sys.lua !!!!
sys = require("sys")

--5秒后执行某函数,可以在后面传递参数
sys.timerStart(log.info,5000,"5s timer")
--3秒后执行某函数,可以在后面传递参数
sys.timerStart(log.info,3000,"3s timer")
--每秒执行,永久循环,返回定时器编号
local loopId = sys.timerLoopStart(log.info,1000,"1s loop timer")

--第一个任务
sys.taskInit(function()

    while true do
        sys.waitUntil(loopId, 2000) --等待2000ms
        log.info("task1","wow")

        sys.wait(1000) --延时1秒,这段时间里可以运行其他代码
    end
end)

--第二个任务
sys.taskInit(function()
    sys.wait(10000) --延时10秒,这段时间里可以运行其他代码
    sys.timerStop(loopId)--停止永久循环定时器

    while true do
        log.info("task2","wow")
        sys.wait(500) --延时0.5秒,这段时间里可以运行其他代码
    end
end)


-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!


三,打印分析

在这里插入图片描述

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值