1.create
創建協同程序 ,參數是函數(一般都是匿名函數),返回值是thread類型
co = coroutine.create(function ()
print("hi")
end)
print(co) --> thread: 0x8071d98
2.status
print(coroutine.status(co)) -->
suspended
status 協同有三個狀態:掛起態(suspended)、運行態(running)、停止態(dead)。剛創建時是掛起態
3.resume
函數coroutine.resume使協同程序由掛起狀態變爲運行態:
coroutine.resume(co) --> hi
運行介紹後狀態變成dead
4.yield
它可以將正在運行的代碼掛起,看一個例子:
co = coroutine.create(function ()
for i=1,10do
print("co", i)
coroutine.yield()
end
end)
5.Lua中協同的強大能力,還在於通過resume-yield來交換數據。
<1>只有resume,沒有yield,resume把參數傳遞給協同的主程序。
co = coroutine.create(function (a,b,c)
print("co", a,b,c)
end)
coroutine.resume(co, 1, 2, 3) --> co 1 2 3
<2>,數據由yield傳給resume。true表明調用成功,true之後的部分,即是yield的參數。
-->yield的參數resume的返回值
co = coroutine.create(function (a,b)
coroutine.yield(a + b, a - b)
end)
print(coroutine.resume(co, 20, 10)) --> true 30 10
相應地,resume的參數,會被傳遞給yield。
-->resume的參數變成yield的返回值
co = coroutine.create (function ()
print("co", coroutine.yield())
end)
coroutine.resume(co)
coroutine.resume(co, 4, 5) --> co 4 5
<3>協同代碼結束時的返回值,也會傳給resume:
co = coroutine.create(function ()
return 6, 7
end)
print(coroutine.resume(co)) --> true 6 7