Lua协程coroutine库用法

一.学习Lua协程的目的

1.可以更好的学习和掌握一些Lua框架比如ToLua,因为这些框架可能使用Lua协程

2.Lua协程是Lua语言的一部分,虽然不常用,掌握后可以在遇到某些需求时可以想到用Lua协程可以解决问题。

二.Lua协程概念

和Unity协程的概念类似,Lua协程是可以让函数暂停,在暂停处继续执行方法的机制。

三.协程API

3.1 coroutine.create(func)

接收一个function参数,返回一个thread类型变量(下文称协程对象)

Lua 复制代码
    local co = coroutine.create(function ()
        print("co execute")
    end)
    print(co)

3.2 coroutine.status(co)

接收一个协程对象,返回协程状态。一个协程有suspended, running, and dead三种状态。通过coroutine.create创建的协程,其初始状态为suspended,意味着其函数体不会自动执行,下面例子展示了协程的三种状态

Lua 复制代码
    co = coroutine.create(function ()
        print("co execute")
        print("co 函数体内status:",coroutine.status(co))
    end)
    print("co create后status:",coroutine.status(co))
    coroutine.resume(co)
    print("co resume后status:",coroutine.status(co))

3.3 coroutine.resume(co)

coroutine.resume方法恢复一个协程的执行,使其状态从suspended变为running

3.4 coroutine.yield()

挂起一个协程,使其状态变为suspended

Lua 复制代码
   co = coroutine.create(function ()
        print("co execute before yield")
        coroutine.yield()
        print("co execute after yield")
    end)

    coroutine.resume(co)
    function funcResume()
        print("funcResume called")
        coroutine.resume(co)
    end
cs 复制代码
        if (GUI.Button(new Rect(50, 50, 120, 45), "DoFile"))
        {
            //strLog = "";
            LuaFunction luaFunc = lua.GetFunction("funcResume");
            if (luaFunc != null)
            {
                luaFunc.BeginPCall();
                luaFunc.PCall();
                luaFunc.EndPCall();
            }
        }

参考:

Coroutine Basics

相关推荐
wuqingshun31415936 分钟前
重写equals而不重写hashCode,会出什么问题?
java·开发语言
飞猪~37 分钟前
LangChain python 版本 第一集
开发语言·python·langchain
李燚3 小时前
Go 项目怎么组织:DDD 4 层 vs MVC vs 脚本式
开发语言·golang·mvc·ddd·agent框架·eino
2zcode3 小时前
免费开源项目文档:基于MATLAB图像处理的啤酒瓶口缺陷检测系统设计与实现
开发语言·图像处理·matlab
人工智能时代 准备好了吗3 小时前
AI回答内容进入率监测:引用识别、文本匹配与语义判断
开发语言·人工智能·python
LONGZETECH3 小时前
新能源汽车动力电池检测仿真教学系统:C/S 分层架构与数字化实训落地全解析
大数据·c语言·开发语言·人工智能·架构·系统架构·汽车
郝学胜-神的一滴3 小时前
中级OpenGL教程 013:渲染器类架构设计与逐帧渲染流程详解
开发语言·c++·unity·游戏引擎·图形渲染·opengl·unreal
Metaphor6924 小时前
使用 Python 冻结 Excel 文件中的行、列和单元格
开发语言·python·excel
言乐64 小时前
Python实现建造微服务商城后台
开发语言·python·算法·微服务·架构
KobeSacre5 小时前
Semaphore 源码
java·开发语言