lua协程coroutine简单用法

1, 启动协程, 以及yield

local co1Func = function(str)
    for i=1,2 do
        print(str, i)
        coroutine.yield(i)
    end
    print("exit", coroutine.running())
end

local co1 = coroutine.create(co1Func)
print(coroutine.running())

local isSucc, result = coroutine.resume(co1, "a")
print(isSucc, result, coroutine.status(co1))

isSucc, result = coroutine.resume(co1, "b")
print(isSucc, result, coroutine.status(co1))

isSucc, result = coroutine.resume(co1, "c")
print(isSucc, result, coroutine.status(co1))

 

 

2, 嵌套协程

local coSubFunc = function(str)
    print("coSub enter", str, coroutine.running())

    for i=1,2 do
        print("coSub", str, i)
    end

    print("coSub exit", str, coroutine.running())
end

local coMainFunc = function(str)
    print("coMain enter", str, coroutine.running())

    local coSub = coroutine.create(coSubFunc)
    coroutine.yield()

    coroutine.resume(coSub, "aa") --启动嵌套协程后, 主协程会挂起(suspended), 直到嵌套协程执行结束或yield
    print("coMain aa", coroutine.running(), coroutine.status(coSub))

    isSucc = coroutine.resume(coSub, "bb")
    print("coMain bb", coroutine.running(), coroutine.status(coSub))

    print("coMain exit", str, coroutine.running())
end

local coMain = coroutine.create(coMainFunc)
print(coroutine.running())

coroutine.resume(coMain, "a")
print("main a", coroutine.running(), coroutine.status(coMain))

coroutine.resume(coMain, "b")
print("main b", coroutine.running(), coroutine.status(coMain))

 

posted @ 2024-02-28 22:45  yanghui01  阅读(11)  评论(0编辑  收藏  举报