美文网首页
Lua-协程

Lua-协程

作者: 叫我颜先生 | 来源:发表于2018-10-22 16:08 被阅读0次

简介

示例

co=coroutine.create(
    function()
        print("hi");
    end
)
print(coroutine.status(co));

coroutine.resume(co);
print(coroutine.status(co));
--[[print:
suspended
hi
dead
]]
co=coroutine.create(
    function()
        for i=1,2 do
            print("hi");
            coroutine.yield();
        end
    end
)
coroutine.resume(co);
print(coroutine.status(co));

coroutine.resume(co);
print(coroutine.status(co));

coroutine.resume(co);
print(coroutine.status(co));

coroutine.resume(co);
print(coroutine.status(co));
--[[print:
hi
suspended
hi
suspended
dead
dead
]]

参数及返回值

  • create:返回coroutine,参数是函数
  • resume:返回bool值
  • yield:挂起
  • status:返回状态
  • wrap:返回一个函数,调用这个函数时就开始执行,相当于create+resume
  • running:返回运行的coroutine
-- bool + 函数返回参数
co=coroutine.create(
    function()
        return 4,5;
    end
)
print(coroutine.resume(co,1,2,3));
--[[print:
true 4 5
]]
-- bool + 传入参数多少
co=coroutine.create(
    function(a,b)
        print(a,b);
        coroutine.yield();
    end
)
print(coroutine.resume(co,1,2,3));
--[[print:
1 2 
true
]]
-- bool + yield所有参数
co=coroutine.create(
    function(a,b)
        print(a,b);
        coroutine.yield(a+b,a-b,a*b,a/b);
    end
)
print(coroutine.resume(co,1,2,3));
--[[print:
1 2
true 3 -1 2 0.5         --所有传递给yield的参数都将返回
]]
-- wrap
co=coroutine.wrap(
    function(a)
        return 2*a;
    end
)
c=co(1);
print(c);
--[[print:
2
]]

相关文章

网友评论

      本文标题:Lua-协程

      本文链接:https://www.haomeiwen.com/subject/laugzftx.html