查看: 2291|回复: 4
打印 上一主题 下一主题

[其他] 协同程序 Coroutine

[复制链接]

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38268
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-10-28 02:16:18 |只看该作者 |倒序浏览

什么是协同程序(协程)        协同程序和线程差不多,也就是一条执行序列,拥有自己独立的栈,局部变量和指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。

协程和线程的区别
        一个具有多线程的程序可以同时运作几个线程,而协同程序却需要彼此协作地运行。
        就是说,一个具有多个协同程序的程序再任何时刻只能与运作一个协同程序,并且运行的协同程序只会在其显示地挂起时,它的执行才会暂停。

协程的开启与终止
        在[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:新开一条执行序列(同新建线程差不多)并挂起,等待中断指令结束。开销不大,但需要挂起当前执行时使用。

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-10-28 02:38:53 |只看该作者
thanks for this !
回复

使用道具 举报

0

主题

2

听众

1346

积分

助理设计师

Rank: 4

纳金币
505
精华
0
板凳
发表于 2014-10-28 08:42:47 |只看该作者
学习了!  长知识了 ! 谢谢指导
回复

使用道具 举报

1

主题

1

听众

2693

积分

中级设计师

Rank: 5Rank: 5

纳金币
949
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2014-10-28 10:38:35 |只看该作者
好复杂,完全看不懂。。。
回复

使用道具 举报

16

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
3
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2014-10-30 17:20:36 |只看该作者
一定要好好学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-14 16:56 , Processed in 0.113683 second(s), 31 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部