kenlistian

勤学多思

  IT博客 :: 首页 :: 新随笔 ::  :: 聚合  :: 管理 ::
  412 随笔 :: 0 文章 :: 23 评论 :: 0 Trackbacks
Lua 通过 table 提供了所有的协同函数,
create 函数创建一个新的协同程序,
create只有一个参数:
协同程序将要运行的代码封装而成的函数,返回值为thread类型的值。

通常情况下 create 的参数是一个匿名 
co = coroutine.create(function ()
       print("hello")
     end)

print(co)   --> thread: 0x8071d98

协同有三个状态:挂起态,运行态,停止态。

当创建协同程序时开始状态为挂起态,即创建后不会自动运行,
用status 函数检查协同的状态:

如:
print(coroutine.status(co))   --> suspended

挂起状态变为运行态:coroutine.resume

coroutine.resume(co)     --> hello

这个例子中,协同体打印出"hello"之后便进入终止状态:
print(coroutine.status(co))   --> dead

挂起函数yield 。将正在运行的代码挂起,

如下代码:
co = coroutine.create(function ()
    for i=1,10 do
      print("co", i)
      coroutine.yield()
    end
  end)
 
运行如下,将在第一个 yield 处被挂起:
coroutine.resume(co)     --> co   1
print(coroutine.status(co))   --> suspended
从协同的观点看:使用函数 yield 可以使程序挂起,当激活被挂起的程序时,
yield返回并继续程序的执行直到再次遇到 yield 或者程序结束 
coroutine.resume(co)   --> co   2
coroutine.resume(co)   --> co   3
...
coroutine.resume(co)   --> co   10
coroutine.resume(co)   -- prints nothing      


posted on 2008-10-15 12:43 kenlistian 阅读(570) 评论(0)  编辑 收藏 引用 所属分类: AI
只有注册用户登录后才能发表评论。