大家好,骚气十足的额,又来了,对,明天咱们次要来学习下 lua 协程的用法, 小伙伴们筹备好小板凳,筹备开车了~~~(ps:如同有点偏题了,不过不重要你们当作没看见就行(O ^ ~ ^ O))
协程次要函数:
函数名 | 入参 | 返回值 | 形容 |
---|---|---|---|
coroutine.create() | 承受单个参数,这个参数是 coroutine 的主函数 | 返回它的控制器,(一个对象为 thread)的对象 | 创立 coroutine,返回 coroutine,参数是一个函数,当和 resume 配合应用的时候就唤醒函数调用 |
coroutine.resume() | 第一个参数:coroutine.create 的返回值,即一个 thread 对象。第二个参数:coroutine 中执行须要的参数,是一个变长参数,可传任意多个参数。 | 如果程序没有任何运行谬误的话,那么会返回 true,之后的返回值是前一个调用 coroutine.yleld 中传入的参数。如果有任何谬误的话,就会返回 false,加上错误信息 | 重启 coroutine(重启时不必再传参数),和 create 配合应用 |
coroutine.yield() | 传入变长参数,这些参数会作为返回值被 coroutine.resume 接管 | 返回在前一个调用 coroutine.resume()中传入的参数值 | 挂起 coroutine,将 coroutine 设置为挂起状态,这个和 resume 配合应用能有很多有用的成果(返回参数) |
coroutine.running() | 空 | 返回以后正在运行的协程。如果它被主线程调用的话,会返回 nil | 返回正在跑的 coroutine,一个 coroutine 就是一个线程,当应用 running 的时候,就是返回一个 corouting 的线程号如果没有返回 nil |
coroutine.status() | 空 | 返回以后协程的状态:有 running,suspended,normal,dead | 返回正在跑的 coroutine,一个 coroutine 就是一个线程,当应用 running 的时候,就是返回一个 corouting 的线程号如果没有返回 nil |
创立协程实例:
-- 创立一个协程
co = coroutine.create(function (str)
print(str);
end
)
print("以后协程状态:"..coroutine.status(co))
运行后果:
以后协程状态:suspended
创立协程的函数是 coroutine.create,调用这个函数胜利之后就会返回一个协程对象,后续咱们无关协程的操作就围绕这个对象进行。下面的例子 co 就是咱们协程对象。通过 coroutine.status 这个函数查看协程状态,咱们能够发现以后的状态是 suspended 挂起状态,也就是说 coroutine.create 只实现创立协程的动作,然而协程当初并没有跑起来,不然这时候的状态就应该是 running 了。
为了让协程跑起来,这时候就轮到 coroutine.resume 这个函数大展拳脚了。咱们再来看下上面这 hello world 例子。(ps:人人都爱 hello world 不要厌弃博主举的例子很 low 啊≧◠◡◠≦✌)
hello world 例子:
-- 创立一个协程, 但还没有调用
co = coroutine.create(function (str)
print(str);
end
)
-- 开启协程,打印 hello world!coroutine.resume(co,"hello world!")
通过 hello world 这个例子咱们就能够分明的看到协程失常运行起来了,这时候协程的状态是 runnning 嘛?有趣味的童鞋能够打印进去看看,想想看为什么是这个状态。有时候我感觉,学习编程,最重要的还是大家可能多入手,多思考。不然就算我博客写得再具体,大家可能把握的货色还是很无限的。just do it~~~ 话不多说,干就是了!
lua 中文手册
参考文章一
参考文章二