【Lua】coroutine

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






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章