咱們一塊兒來學lua:協程(coroutine) 二

你們好,騷氣十足的額,又來了,對,今天咱們主要來學習下lua協程的用法,小夥伴們準備好小板凳,準備開車了~~~(ps:好像有點偏題了,不過不重要大家看成沒看見就行(O ^ ~ ^ O))編程

協程主要函數:
函數名 入參 返回值 描述
coroutine.create() 接受單個參數,這個參數是coroutine的主函數 返回它的控制器,(一個對象爲thread)的對象 建立 coroutine,返回 coroutine, 參數是一個函數,當和 resume 配合使用的時候就喚醒函數調用
coroutine.resume() 第一個參數:coroutine.create的返回值,即一個thread對象。第二個參數:coroutine中執行須要的參數,是一個變長參數,可傳任意多個參數。 若是程序沒有任何運行錯誤的話,那麼會返回true,以後的返回值是前一個調用coroutine.yleld中傳入的參數。若是有任何錯誤的話,就會返回false,加上錯誤信息 重啓 coroutine(重啓時不用再傳參數),和 create 配合使用
coroutine.yield() 傳入變長參數,這些參數會做爲返回值被 coroutine.resume接收 返回在前一個調用coroutine.resume()中傳入的參數值 掛起 coroutine,將 coroutine 設置爲掛起狀態,這個和 resume 配合使用能有不少有用的效果(返回參數)
coroutine.running() 返回當前正在運行的協程。若是它被主線程調用的話,會返回nil 返回正在跑的 coroutine,一個 coroutine 就是一個線程,當使用running的時候,就是返回一個 corouting 的線程號若是沒有返回nil
coroutine.status() 返回當前協程的狀態:有running,suspended,normal,dead 返回正在跑的 coroutine,一個 coroutine 就是一個線程,當使用running的時候,就是返回一個 corouting 的線程號若是沒有返回nil

建立協程實例:函數

--建立一個協程

co = coroutine.create(

 function (str)

 print(str);

 end

)

print("當前協程狀態:"..coroutine.status(co))

運行結果:學習

當前協程狀態:suspended

建立協程的函數是coroutine.create,調用這個函數成功以後就會返回一個協程對象,後續咱們有關協程的操做就圍繞這個對象進行。上面的例子co就是咱們協程對象。經過coroutine.status這個函數查看協程狀態,咱們能夠發現當前的狀態是suspended掛起狀態,也就是說coroutine.create只完成建立協程的動做,可是協程如今並無跑起來,否則這時候的狀態就應該是running了。
爲了讓協程跑起來,這時候就輪到coroutine.resume這個函數大展拳腳了。咱們再來看下下面這hello world例子。(ps:人人都愛hello world 不要嫌棄博主舉的例子很low啊≧◠◡◠≦✌)lua

hello world例子:.net

--建立一個協程,但尚未調用

co = coroutine.create(

 function (str)

 print(str);

 end

)

--開啓協程,打印hello world!

coroutine.resume(co,"hello world!")

經過hello world這個例子咱們就能夠清楚的看到協程正常運行起來了,這時候協程的狀態是runnning嘛?有興趣的童鞋能夠打印出來看看,想一想看爲何是這個狀態。有時候我以爲,學習編程,最重要的仍是你們可以多動手,多思考。否則就算我博客寫得再詳細,你們可以掌握的東西仍是頗有限的。just do it~~~話很少說,幹就是了!線程

lua中文手冊
參考文章一
參考文章二code

相關文章
相關標籤/搜索