你們好,騷氣十足的額,又來了,對,今天咱們主要來學習下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~~~話很少說,幹就是了!線程