Lua 语法 协同程序

协程的创建

lua 协程的类型是 thread(线程)
协程的本质是一个线程对象
关键字:coroutine.create

-- 创建协程
fun = function ()
 print(123)
end

--第一种协程创建方式
co = coroutine.create(fun)
--协程的本质是一个线程对象

--输出类型:地址
print(co)

-- 输出 thread
print(type(co))

--第二种协程创建方式
-- coroutine.wrap()
co2 = coroutine.wrap(fun)

--输出类型:地址
print(co2)

-- 输出 function
print(type(co2))

协程的运行

-- 对应第一种方式的协程
coroutine.resume(co)

-- 对应第二种方式的xiec
co2()

协程的挂起

--定义协程方法
fun2 = function()
	local  i = 1
	while true do 
		print(i)
		i=i+1
		--协程的状态
		print(coroutine.status(co3))
-- 这个函数可以得到当前正在 运行的协程的线程号
		print(coroutine.running())
		--协程挂起函数
		coroutine.yield(i)
	end
end

--创建协程
co3 =coroutine.create(fun2)

--默认第一个返回值 是 协程是否启动成功
--yield里面的返回值

--启动协程获得返回值
isOk, tempI = coroutine.resume(co3)
print(isOk, tempI)


--启动协程获得返回值
isOk, tempI = coroutine.resume(co3)
print(isOk, tempI)

-- 第二种方法创建协程
co4 = coroutine.wrap(fun2)
-- 这种方式的协程调用 也可以有返回值 只是没有默认第一个返回值了
print("返回值"..co4())
print("返回值"..co4())
print("返回值"..co4())

协程的状态

-- coroutine.status(协程对象)
-- dead 结束
-- suspended 暂停
-- running 进行中

print(coroutine.status(co3))
print(coroutine.status(co))

-- 这个函数可以得到当前正在 运行的协程的线程号
		print(coroutine.running())
posted @ 2024-07-28 20:48  BaiLuoXi  阅读(35)  评论(0)    收藏  举报