一,协同函数的定义和启动:
–a.用coroutine.create创建一个协程
Co= coroutine.create(function(a,b)
local c =a+b
return c
end
)
–1.启动coroutine.create定义的函数
coroutine.resume(Co,20,30)
b.用coroutine.wrap定义一个协同函数
Co1=coroutine.wrap(function (a,b)
local c=a+b
return c
end
)
–1.启动coroutine.wrap()函数
Co1(20,30)
二,协同函数的暂停
Co=coroutine.create(function(a,b)
print a+b
coroutine.yield()
end
)
三,协程函数的返回值
Co2=coroutine.create(function (c,e)
local d=c+e
return d
end
)
res,res1=coroutine.resume(Co2,20,30)–res 是否启动成功,res1返回值1
四,协同函数的状态
coroutine.states(Co) --返回的是当前协同的运行状态。
一、基本库
函数
(basic functions)
_G:保存全局环境的全局变量(不是
函数
)(即_G._G = _G)。
Lua
本身不使用这个变量;改变它的值不会影响任何环境,反之亦然。(改变环境使用setfenv)
_VERSION:保存包含当前解释器版本的字符串的全局变量(不是
函数
),5.1
中
这个变量的值是“
Lua
5.1”。
assert(v [, mess...
通过上两篇
lua
代码执行流程,
lua
协程
场景分析的介绍,知道了
协程
的基本用法和场景.其实
协程
与
协程
之间是通过参数和
返回值
进行交互的.引用上篇的代码:coConsume = coroutine.create(
function ()
while true do
local stutas, msg = coroutine.resume(coProducer)
print('rece...
所有
协程
相关的在表coroutine
中
,创建通过create来创建,参数为
函数
,
返回值
类型为thread.
协程
状态
有:suspended, running, normal, dead。通过coroutine.status获取
协程
状态
。
create创建的
协程
初始
状态
为suspened,通过coroutine.resume来
启动
执行,
协程
状态
变为running
暂停
协程
使用coroutine.yield
lua
L_loadstring(L, "return coroutine.create(function() end)");
nCallResult =
lua
_pcall(L, 0, 1, 0);
创建一个
协程
和
lua
_newthread创建一个线程一样,不过这个创建会在线程的堆栈上压入一个上面的function() end;
lua
_newthread只是创建一个线程,堆栈个数为
一:
协程
与线程的区别
在
Lua
里,最主要的线程是协同程序(coroutine),它跟线程差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西线程跟
协程
的区别:线程可以同时多个运行,而
协程
任意时刻只能运行一个,并且处于运行
状态
的
协程
只有被挂起(suspend)时才会
暂停
二:什么是
协程
协程
和线程都是针对于
函数
来说的,一个
函数
的正常执行步骤是执行完此...
lua
协同程序
个人认为
lua
的协同程序,就是某个
函数
执行到一半可以
暂停
,再重启
其
中
主要程序是 coroutine.create() 创建程序,coroutine.resume()
启动
程序,coroutine.yield()
暂停
程序
这里我先就个人理解写个案例
--这里创建了一个协同程序,刚创建的程序默认是停止
状态
co = coroutine.create(
function(a,b)
--'首先我们直接打印传入得两个参数'
print(a,b);