纳金网
标题:
协同程序 Coroutine
[打印本页]
作者:
狂风大尉
时间:
2014-10-28 02:16
标题:
协同程序 Coroutine
什么是协同程序(协程)
协同程序和线程差不多,也就是一条执行序列,拥有自己独立的栈,局部变量和指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。
协程和线程的区别
一个具有多线程的程序可以同时运作几个线程,而协同程序却需要彼此协作地运行。
就是说,一个具有多个协同程序的程序再任何时刻只能与运作一个协同程序,并且运行的协同程序只会在其显示地挂起时,它的执行才会暂停。
协程的开启与终止
在[color=rgb(85, 85, 85) !important]unity3d
中,使用StartCoroutine方法可开启一个协同程序,也就是说该方法必须在MonoBehaviour或继承于MonoBehaviour的类中调用。
StartCoroutine(string methodName) 可以开启线程并在线程结束前终止线程,并且开启线程是最多只能传递一个参数,性能消耗会更大一点。
StartCoroutine(IEnumerator routine) 只能等待线程的结束而不能随时终止(除非使用StopAllCoroutines()方法),在参数没有限制。
在Unity3D中,使用StopCoroutine(string methodName)来终止一个协同程序,使用StopAllCoroutines()来终止所有可以终止的协同程序,但这两个方法都只能终止该MonoBehaviour中的协同程序。
协程与yield语句
一个协同程序再执行过程中,可以在任意位置使用yield语句。yield的返回值控制何时恢复协同程序向下执行。
协同程序再对象自有帧执行过程中堪称优秀,在性能上没有更多的开销。
StartCoroutine函数是立即返回的,当时yield可以延迟结果,知道协同程序执行完毕。
Coroutine和Invoke比较
Invoke:执行没有被挂起,相当于设置完被调用函数的执行时间后即时向下执行。应用到每隔一段时间执行某个函数很方便。
Coroutine:新开一条执行序列(同新建线程差不多)并挂起,等待中断指令结束。开销不大,但需要挂起当前执行时使用。
作者:
hyui
时间:
2014-10-28 02:38
thanks for this !
作者:
oelongeo
时间:
2014-10-28 08:42
学习了! 长知识了 ! 谢谢指导
作者:
jinqi166
时间:
2014-10-28 10:38
好复杂,完全看不懂。。。
作者:
我不再年轻
时间:
2014-10-30 17:20
一定要好好学习
欢迎光临 纳金网 (http://old.narkii.com/club/)
Powered by Discuz! X2.5