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))