有些事情一帧之内只需要做一次,比如收发邮件时,一帧内数据层多次的变化,表现层只需要一次更新。

我采用协程做这个事情,为了避免发起多个协程,我记录了一个协程是否发起的变量。

但是u3d里的coroutine,在发起的脚本acvited=false后,就不更新了,并且我测试过,再恢复成actived =

true,协程依旧不更新了,就像没调用一样。

而我那些标志还是【已经发起】状态,这样就发生死锁了----想更新的发起不了,之前的异常结束导致标志复位不了。

上述现象发生在用户收到邮件后的一帧里操作了鼠标关闭了邮件系统。

由于网络消息分派比用户输入的时机靠前(我们项目里的既有结构),导致协程发起了,但实际无法执行。

如果先关闭,再处理数据,就会走关闭时的处理,就不会出错了---可是网络消息也是有可能导致UI关闭的,看业务逻辑了。

回到现状,

我只能在隐藏的时候,恢复标志。

可是u3d隐藏对象过于随意,大多使用GameObject.SetActiveRecursively(bool)接口干活。

这导致我无法保证所有处理该对象的代码都知道恢复标志这个事情。

我可以提炼一个特殊的Visible接口,确保标志恢复,但是会有以下情况:

如果将逻辑分散到多个脚本组件,如何访问到这个特殊的Visible接口就会变得很麻烦。

如果这样,那我还不如用Update来做。

目前的解决方案是:

一个场合恰好只有一个脚本,能满足“提炼一个特殊的Visible接口,确保标志恢复”。

另外一个场合是很多脚本,刚好协程只做可见性控制,这导致出错了也不怕,因为会被其他可见性操作恢复。

谁能给出基于Coroutine的不会出死锁问题的更新方案?

今天在好友列表的更新也用了协程。而且关闭逻辑刚好在别的脚本里,现在的打算是让关闭按钮捕获用户输入后,转给Model层,再分别通知各个脚本组件执行恢复操作。

希望这么做了,效率会比update效率高,反正我觉得这不是核心性能瓶颈。

unity update 协程_[转载]【转载】unity3D中使用协程来做“多次调用一次更新”特性的一个大坑。...相关推荐

  1. java 协程_你真的了解kotlin的协程么?

    协程我的理解是协作的线程,就是说与主线程协作的线程,也就是工作线程. 而协程的本质确实是这样.Kotlin协程的底层就是Java的多线程,协程就是一个比较方便的线程框架.协程这种线程框架有什么好处呢? ...

  2. 开启协程_「科普」什么是协程?

    阅读本文大概需要 6 分钟 今天要讲的这个东西说实话,我也是今天才知道,一个我们大多数人可能从来都没用过的语法,哪就是传说中的[协程],英文表达是Coroutine. 可能你会说,携程谁不知道啊,不就 ...

  3. unity怎么显示骨骼_浅谈Unity3D 骨骼动画

    最近研究了一下游戏中模型的骨骼动画的原理,做一个学习笔记,便于大家共同学习探讨. ps:最近改bug改的要死要活,博客写的吭哧吭哧的~ 首先列出学习参考的前人的文章,本文较多的参考了其中的表述: 一. ...

  4. 协程asyncio_Python 异步模块 asyncio 中的协程与任务

    协程(Coroutine)是允许执行被挂起.恢复.以及取消的程序.Python 3 中最初是使用 @asyncio.coroutine 装饰器和 yield from 关键字组合来实现协程.单词 yi ...

  5. python主线程执行_在Django vi中的主线程中执行Python函数

    我创建了Django视图"graph",目的是显示从matplotlib.pyplot模块.我编写了我的函数plot\u bubbles(返回amatplotlib.figure. ...

  6. mysql update 排他锁_数据库:Mysql中“select ... for update”排他锁分析

    Mysql InnoDB 排他锁 用法: select - for update; 例如:select * from goods where id = 1 for update; 排他锁的申请前提:没 ...

  7. 【转载】ABAP中数据和对象的动态创建和调用

    ABAP中数据和对象的动态创建和调用 动态创建数据或者对象是指在程序运行过程中创建数据变量或者对象实例,我们可以用引用定义来创建数据变量,格式为: CREATE DATA  gt_def TYPE ( ...

  8. python中update什么意思_如何在Python中更新字典中键的值?

    我有一本代表书店的字典.键表示书名,值表示当前书籍的份数.从商店出售书时,书的份数必须减少. 我已经写了一个代码来减少已售出图书的拷贝数,但在更新后打印词典时,我得到的是初始词典,而不是更新后的词典. ...

  9. python爬携程_用python selenium抓取携程信息

    最近在学习selenium,遇到一个很奇怪的问题,debug了半天还是没弄明白,我是在测试抓取携程网站的机票信息 我的代码: # -*- coding: utf-8 -*- from selenium ...

  10. win7如何更改文件类型_如何在win10中使用云笔记软件来做pdf手写笔记或绘图? - 敬业签便签...

    Win10是现在很多职场办公人士和笔记本电脑用户所使用的操作系统,其界面更为简洁,功能也更为强大.和Windows之前所发布的经典Win7系统一样,在Win10系统电脑上也可以下载安装很多好用的工具软 ...

最新文章

  1. 【C++】多线程互斥锁、条件变量
  2. 解决mysql获取不到连接的问题
  3. hibernate的映射之二(一对多双向关联)
  4. Raw Socket编程
  5. php程序员跟java一样吗,【后端开辟】php程序员能够转java吗?
  6. 微课|中学生可以这样学Python(2.1.2节):常量与变量
  7. 给WPF文字加多条修饰线
  8. 给DateField和DateChooser进行汉化
  9. 安卓虚拟键盘_微软双屏Surface Duo上的安卓应用体验:可瞬间变身笔记本电脑
  10. Matlab R2010b 破解安装
  11. Proteus的基本使用方法
  12. Ubuntu搭建KMS服务
  13. 元胞自动机:森林火灾模拟(Python:numpy、seaborn)
  14. Python Turtle画奥运标志
  15. 圆角矩形大小怎么调整html,html圆角矩形
  16. 基因家族的鉴定-基于windows系统上的本地blast
  17. 3dmax:3dmax的软件两大常用工具之基本三维实体(标准基本体、扩展基本体、复合对象)之详细攻略
  18. SSM实现邮箱验证功能
  19. Netflix 文化
  20. CSS 各类选择器 第一节

热门文章

  1. Spring Boot---Web应用返回jsp页面
  2. 分享几个Python小技巧函数里的4个小花招 1
  3. Flask模板操作一:基本使用
  4. supervisor 管理
  5. 【转】SQLServer 行列互换
  6. 64位 centos 服务器 编译安装 gcc-4.6.2 和 codeviz
  7. 进程间通信之管道与有名管道
  8. CentOS 6.4下CDH4集群安装(1)
  9. 不可忽视的IT运维管理
  10. 记我朋友的一次前端面试