lua 协同程序(coroutine)

2019-11-11  本文已影响0人  菜鸟的笔记

基本语法

方法 描述
coroutine.create() 创建 coroutine,返回 coroutine, 参数是一个函数,当和 resume 配合使用的时候就唤醒函数调用
coroutine.resume() 重启 coroutine,和 create 配合使用
coroutine.yield() 挂起 coroutine,将 coroutine 设置为挂起状态,这个和 resume 配合使用能有很多有用的效果
coroutine.status() 查看 coroutine 的状态。注:coroutine 的状态有三种:dead,suspended,running,具体什么时候有这样的状态请参考下面的程序
coroutine.wrap() 创建 coroutine,返回一个函数,一旦你调用这个函数,就进入 coroutine,和 create 功能重复
coroutine.running() 返回正在跑的 coroutine,一个 coroutine 就是一个线程,当使用running的时候,就是返回一个 corouting 的线程号

注:在任一指定时刻只有一个协同程序在运行

定义一个协同程序

定义 coroutine (方法一:使用 coroutine.create)
coroutineName= coroutine.create(
    function(i)
        print(i);
    end
)
 -- 开启 coroutine
coroutine.resume(coroutineName, 1) 
-- 查看 coroutine 的状态
print(coroutine.status(coroutineName))  
-- 输出结果: 1  .. dead
定义 coroutine (方法二:使用 coroutine.wrap)
coroutineName= coroutine.wrap(
    function(i)
        print(i);
    end
)
 -- 开启 coroutine
coroutineName(1) 
-- 输出结果: 1  
暂停coroutine 使用 coroutine.yield()
coroutineName= coroutine.create(
    function(i)
        print(i);
        coroutine.yield();
        print(i + i);
    end
)
 -- 开启 coroutine
coroutine.resume(coroutineName, 1)   
-- 查看 coroutine 的状态
print(“暂停了!”)  
 -- 重启 coroutine
coroutine.resume(coroutineName)   
-- 输出结果:1 ..  暂停了!.. 2
coroutine 返回值
coroutineName= coroutine.create(
    function(i)
        print(i);
        -- 暂停时,可以返回coroutine返回值
        coroutine.yield(i);
        print(i + i);
        -- 结束时,也可以返回coroutine返回值
        return i + i;
    end
)
 -- 开启 coroutine
res = coroutine.resume(coroutineName, 1)   
print(res)
-- 查看 coroutine 的状态
print("暂停了!")  
-- 重启 coroutine
res = coroutine.resume(coroutineName)   
print(res)
-- 输出结果: 1 .. 1 ..  暂停了!.. 2 .. 2
上一篇 下一篇

猜你喜欢

热点阅读