例子一

handle = coroutine.create(function (arg1,arge2)local start = 0print(arg1,arg2)while true doif( start == 0 or start == 20) thenprint("yield arg is :",coroutine.yield(arg .. "me",arg2+1))print("back to",start)endif start == 30 thenbreakendstart = start + 1print("it is first coroutine istance")endreturn "coroutine is over"end)print(coroutine.resume(handle,"test",1999))
print(coroutine.resume(handle,"ooo",33))
print(coroutine.resume(handle,"111",77))
print(coroutine.resume(handle,"jjj",55))

输出结果:

分析

第一次调用resume,此时没有对应的yield,它的参数时传递给匿名函数的

第二次调用resume,此时有对应的yield, 此时resume的作用是从函数yield返回,resume的参数正好传递给yield作为返回值(yield的第一个返回值是固定的,返回调用状态true or false)

第一次调用yield,并传递了参数,此时的yield参数是作为:让本次yield调用返回的(匿名函数继续执行,而不是卡在yield函数调用处),resume 调用的返回值。

例子二(生产者,消费者)

function send(x)
coroutine.yield(x)
end
pd_handle = coroutine.create(function ()
local x = 0
while true do
x = io.read()
send(x)
end)
fuction receive()
local status,value = coroutine.resume(pd_handle)
return value
end
function consumer()
local y = 0
while true do
y = receive()
print("receive value is :",y)
end
end
consumer()

lua协程的使用列子分析相关推荐

  1. Unity协程实现分析以及Lua协程与Unity协程的混合使用

    1,节选翻译一篇stackoverflow关于Unity协程实现的讨论 - The big clues are in the C# version. Firstly, note that the re ...

  2. Lua协程Coroutine是什么

    Lua协程Coroutine是什么 协程和线程不同: 同一时刻,一个多线程程序可以用多个线程同时执行:而协程只能有一个在执行 多线程是抢占式的:而协程是非抢占式的,只有协程显示被挂起,才会被挂起 协程 ...

  3. Lua 协程和线程区别

    协程就是协程,不是线程. CPU执行单位是线程,不是什么协程. 协程,是同步执行,不是并行,只是切了一个上下文了,为你保存原来的上下文而已. 切到第二个协程时,原来的协程处于挂起状态. 这个特指lua ...

  4. lua协程 unity_XLua 之 Lua 协程 与 Unity 协程互通

    前言: 最近在摸索用XLua 在 Unity 中进行全Lua 开发.然后就遇到了协程的问题.我想在 Lua 侧开启一个 Unity 的协程,该怎么做呢? 一开始我先去翻 XLua 的文档,我记得之前我 ...

  5. python处理流程-在python异步协程中处理流程分析(一)

    之前的一篇文章python中的asyncio使用详解介绍了在python3 中的asyncio的基础使用,可以在实际的工作中,由于以前写了太多的多线程与多进程,所以对于以前编写风格和一些由于没有异步支 ...

  6. 对lua协程的一点理解

    读<Programming In Lua>协程那一章,比较困惑的还是procuer-consumer那个例子: function consumer(prod)while true dolo ...

  7. lua协程 unity_unity协程coroutine浅析

    一.序言 在unity的游戏开发中,对于异步操作,有一个避免不了的操作: 协程,以前一直理解的懵懵懂懂,最近认真充电了一下,通过前辈的文章大体理解了一下,在这儿抛砖引玉写一些个人理解.当然首先给出几篇 ...

  8. LUA 协程 Coroutine

    协程 Coroutine 协程(coroutine)并不是 Lua 独有的概念,如果让我用一句话概括,那么大概就是:一种能够在运行途中主动中断,并且能够从中断处恢复运行的特殊函数.(嗯,其实不是函数. ...

  9. 【笔记】lua - 协程

    文章目录 双循环切换 迭代器 协程 其执行过程类似于不带返回值的函数调用. 一个程序可以包含多个协程,可以对比与一个进程包含多个线程: 线程相互独立,有自己的上下文,切换受系统控制: 协程也相对独立, ...

最新文章

  1. OpenCV中的特征匹配(Feature Matching)
  2. Linux下pwn从入门到放弃,pwn从入门到放弃第六章——简单ROP
  3. Python基础知识点总结
  4. 2019-06-12 Java学习日记之JDBC
  5. db2 版本发布历史_数据库各厂商的发展历史(2. DB2 of IBM)
  6. Flash中textInput限定中英文字数
  7. 极速理解设计模式系列:4.原型模式(Prototype Pattern)
  8. c++ 设置类型别名
  9. C语言和设计模式(之原型模式)
  10. html5标签属性大全_html5 文本相关标签
  11. java疑难杂症集锦之eclipse(持续更新中)
  12. python pip安装报错_python pip安装requests时报错,怎么解决
  13. C陷阱与缺陷阅读笔记(上)
  14. sip系统完整性是什么?SIP系统完整性保护关闭方法(含M1)
  15. ffplay播放摄像头
  16. TomCat8080/8081端口占用问题!如何解决
  17. 第九章、Zigbee模块指令系统
  18. CCNA系列十一之Frame-Relay
  19. java导出帆软pdf,java后台把fineRepo图表导出pdf格式时发生错误!
  20. oracle汉字排序

热门文章

  1. 【PostgreSQL-9.6.3】设置log参数
  2. 2022-01-09总结
  3. 异常mongodb:Invalid BSON field name XXXXXX:YYYYY.zz
  4. git使用报错: fatal: Couldn‘t find remote ref master的解决方法
  5. 在暂存区域中显示文件中的git diff [复制]
  6. PowerShell说“此系统上的脚本执行被禁用。”
  7. office 高效办公智慧树_精品网课office,让工作学习更轻松
  8. Win11如何提高游戏性能?Win11提升游戏性能的方法
  9. win11很卡怎么办 windows11很卡的解决方法
  10. Activity生命周期Android,横屏切换不重新创建Activity, Activity的四种launchMode