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

相关推荐
LDR0061 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术1 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园1 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob1 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享1 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.1 天前
C语言--day30
c语言·开发语言
何以解忧,唯有..1 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽1 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下1 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗1111 天前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言