加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 教程 > 正文

Lua协同机制分析

发布时间:2021-12-14 20:37:11 所属栏目:教程 来源:互联网
导读:写点简单的控制线程挂起的操作,coroutine.yield()这个函数的使用,从协同的观点看:使用函数yield可以使程序挂起,当我们激活被挂起的程序时,将从函数yield的位置继续执行程序,直到再次遇到yield或程序结束。首先我们先看一段代码,如下: co = coroutine

写点简单的控制线程挂起的操作,coroutine.yield()这个函数的使用,从协同的观点看:使用函数yield可以使程序挂起,当我们激活被挂起的程序时,将从函数yield的位置继续执行程序,直到再次遇到yield或程序结束。首先我们先看一段代码,如下:
 
co = coroutine.create(function ()
 for i=1,10 do
  print("co",i)
  coroutine.yield()
 end
end)
 
coroutine.resume(co)
print(coroutine.status(co))
 
这段代码比较简单,高手就不用来这里,呵呵,偶也是一个初学者,大家新手入门的话可以关注本博客,随时查看一下这些内容,coroutine.yield()其中这句话负责将正在运行的东西挂起,我们打印出它的状态可以看到如下结果,如图:
 
 
 
然后我们再继续添加一些代码,代码如下:
 
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
print(coroutine.resume(co))
 
我们把已经结束的线程再继续的时候就出现以下情况,上面的代码只是为了展示给大家会出现什么结果,结果如下图:
 
 
 
我们可以看到最后打印出一个 :cannot resume dead coroutine(不能继续运行一个已经死亡的线程)。
 
注意:resume运行在保护模式下,因此,如果协同程序内部存在错误,Lua并不会抛出错误,而是将错误返回给resume函数。

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读