#!/usr/local/bin/lua
functionfunc(a, b)while a > 0doprint(a + b)
print("running:", coroutine.isyieldable())
a = a-1if a < 50then
y = coroutine.yield(80, 2)
print(y)
endendend
co1 = coroutine.create(func)
print(co1)
print(coroutine.status(co1))
coroutine.resume(co1, 100, 1)
print(coroutine.status(co1))
#!/usr/local/bin/lua
co2 = coroutine.wrap(function(a, b)print("resume :", a, b)
ret = coroutine.yield()
print("ret:", ret)
end)
print(type(co2))
print(co2)
co2(2,3)
co2(88)
--程序运行结果functionfunction: 0x135b6c0resume : 2 3
ret: 88
functionfoo(a)print("foo", a)
returncoroutine.yield(2 * a)
end
co = coroutine.create(function( a, b )print("co-body", a, b)
local r = foo(a + 1)
print("co-body", r)
local r, s = coroutine.yield(a + b, a - b)
print("co-body", r, s)
return b, "end"end)
print("main", coroutine.resume(co, 1, 10))
print("main", coroutine.resume(co, "r"))
print("main", coroutine.resume(co, "x", "y"))
print("main", coroutine.resume(co, "x", "y"))
例程:
#!/usr/local/bin/lua
print("========coroutine.create==============")
functionf(a, b, c)print("a + b + c=", a+b+c)
end
co = coroutine.create(f)
print(type(co))
print(co)
print(coroutine.resume(co, 2, 4, 6))
print(coroutine.status(co))
print("========coroutine.wrap==========")
functiong(a, b ,c)print("a * b * c=", a*b*c)
end
co1 = coroutine.wrap(g)
print(type(co1))
print(co1)
print(co1(2,3,4))
--程序运行结果
========coroutine.create==============
thread
thread: 0x1475638
a + b + c= 12true
dead
========coroutine.wrap==========
functionfunction: 0x147cbe0a * b * c= 24