大家好,騷氣十足的額,又來了,對,今天我們主要來學習下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啊≧◠◡◠≦✌)
hello world例子:
--創建一個協程,但還沒有調用
co = coroutine.create(
function (str)
print(str);
end
)
--開啓協程,打印hello world!
coroutine.resume(co,"hello world!")
通過hello world這個例子我們就可以清楚的看到協程正常運行起來了,這時候協程的狀態是runnning嘛?有興趣的童鞋可以打印出來看看,想想看為什麼是這個狀態。有時候我覺得,學習編程,最重要的還是大家能夠多動手,多思考。不然就算我博客寫得再詳細,大家能夠掌握的東西還是很有限的。just do it~~~話不多説,幹就是了!
lua中文手冊
參考文章一
參考文章二