協程:協同程式,在主程式執行的同時,開啟另外一段邏輯處理,來協同當前程式的執行,。
開啟協程的兩種方式
1、startcoroutine(string methodname)
注意:(1)、引數是方法名(字串型別),此方法可以包含乙個引數
(2)、形參方法可以有返回值
2、startcoroutine(ienumerator method)
注意:(1)、引數是方法名(testmethod()),方法中可以包含多個引數
(2)、ienumrator 型別的方法不能含有ref或者out 型別的引數,但可以含有被傳遞的引用
(3)、必須有有返回值,且返回值型別為ienumrator,返回值使用(yield retuen +表示式或者值,或者 yield break)語句
終止協程的兩種方式:
stopcoroutine (string methodname),只能終止指定的協程
使用時注意:
在程式中呼叫stopcoroutine() 方法只能終止以字串形式啟動的協程
stopallcoroutine(),終止所有協程
yield:掛起,程式遇到yield關鍵字時會被掛起,暫停執行,等待條件滿足時從當前位置繼續執行
yield return 0 or yield return null:程式在下一幀中從當前位置繼續執行
yield return 1,2,3,......: 程式等待1,2,3...幀之後從當前位置繼續執行
yield return new waitforseconds(n):程式等待n秒後從當前位置繼續執行
yield new waitforendofframe():在所有的渲染以及gui程式執行完成後從當前位置繼續執行
yield new waitforfixedupdate():所有指令碼中的fixedupdate()函式都被執行後從當前位置繼續執行
yield return www:等待乙個網路請求完成後從當前位置繼續執行
yield return startcoroutine():等待乙個協程執行完成後從當前位置繼續執行
yield break
如果使用yield break語句,將會導致協程的執行條件不被滿足,不會從當前的位置繼續執行程式,而是直接從當前位置跳出函式體,回到函式的根部
協程的執行原理
協程函式的返回值時ienumerator,它是乙個迭代器,可以把它當成執行乙個序列的某個節點的指標,它提供了兩個重要的介面,分別是current(返回當前指向的元素)和movenext()(將指標向後移動乙個單位,如果移動成功,則返回true)
如果movenext函式返回為true意味著協程的執行條件被滿足,則能夠從當前的位置繼續往下執行。否則不能從當前位置繼續往下執行。
gevent 協程用法
文章介紹了一種採用迴圈的方式生產協程列表,並可以向協程函式傳遞引數。協程引用 import gevent from gevent import monkey,pool monkey.patch all 初始化協程池 poolnum 10 pool pool.pool poolnum 例項化乙個協程池...
unity 協程的用法
概念 伴隨著主線程 起運 的 段程式。協程與協程之間是並 執 與主線程也是並 執 協程可以用來計時,例如lol生產野怪,在怪物死亡時呼叫計時生成野怪的協程,那麼這段程式只會在野怪倒計時的時候執行,生成野怪後協程就會關閉,比起直接寫在主程序裡節省效能。關鍵字ienumerator 協程必須返回 yie...
協程巢狀協程
import asyncio import functools 第三層協程 async def test1 print 我是test1 await asyncio.sleep 1 print test1已經睡了1秒 await asyncio.sleep 3 print test1又睡了3秒 ret...