lua的coroutine

编辑器是IDEA,lua协程学习汇总:

---lua协程
--可以使用debug模式一步步查看程序的运行

coroutineFunction = function(a,b)
--coroutine.yield 挂起正在运行的协程 传递给yield的参数将成为resume的额外返回值
for i = 1, 3 do
    print(i,a,b)
    local returnValue01,returnValue02 =  coroutine.yield()
    print(returnValue01,returnValue02)
end
end
--coroutine.create 根据一个函数创建协同程序
co2 = coroutine.create(coroutineFunction)
--coroutine.resume 开始或者继续一个协程的运行
--当第一次执行一个协程时,从主函数开始运行,参数传入函数主体
--如果协程被挂起,resume会重新启动它,参数作为挂起点的返回值
coroutine.resume(co2,100,200)  --输出 1 100 200
coroutine.resume(co2,500,600)  --输出 500 600 和 2 100 200
coroutine.resume(co2,700,800)  --输出 700 800 和 3 100 200


testM01 = function(a,b)
    print(coroutine.status(co1)) --输出running
    print("co",a,b,coroutine.yield("king"))
    return "bbb"
end
co1 = coroutine.create(testM01)
--coroutine.status 显示协程状态
--如果协程正常运行,那么resume返回true和传给yield的参数(当协程挂起)
--或者时主体函数的所有返回值(当协程终止)
print(coroutine.resume(co1,1,2))  --输出 true king
print(coroutine.status(co1)) --输出 suspended
print(coroutine.resume(co1,3,4,5)) --输出 co 1 2 3 4 5 true bbb
print(coroutine.status(co1))  --输出 dead




local co1 = coroutine.create(
        function()
            print("来看看协程出现错误怎么处理")
            coroutine.yield(bb.name)
 end)
--coroutine.resume是在保护模型下运行,如果有错误发生
--lua不会显示错误,而是返回false和错误消息
--同时这个协程的状态变成dead
print(coroutine.resume(co1))
print(coroutine.status(co1)) --输出dead


local co2 = coroutine.create(
        function()
            print(coroutine.running()) --输出thread: 0079C490
 end)
coroutine.resume(co2)
--coroutine.running 返回当前正在运行的协程
print(coroutine.running())  -- 输出 nil

---coroutine.wrap 创建一个新协程
--返回一个函数,每次调用该函数都会延续该协程
--coroutine.wrap不是在保护模型下运行,如果发生错误,则抛出这个错误
local wrap = coroutine.wrap(
        function(input)
            print("函数的参数"..input)
            local can1,can2 = coroutine.yield("bbb")
            print(can1,can2)
            return "函数返回值"
 end)
print(wrap("abc")) --输出 函数的参数abc  bbb
print(wrap("efg")) --输出 efg nil  函数的返回值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值