Lua協程例子

2021-07-31 21:03:25 字數 2209 閱讀 2825

lua的協程是好東西,跟unity的協程還是不太一樣,下面寫了乙個例子,直接上**:

co=coroutine.create(function

() -- body

print

"hi coroutine";

end)

print(type(co));

print(coroutine.status(co));

coroutine.resume(co)

print(coroutine.status(co));

print

"-------------------------------";

print

"-------------------------------";

co1=coroutine.create(function

() -- body

print

"hi coroutine";

coroutine.yield();

print

"yield end start";

end)

print(type(co1));

print(coroutine.status(co1));

coroutine.resume(co1)

print(coroutine.status(co1));

coroutine.resume(co1)

print(coroutine.status(co1));

print

"-------------------------------";

print

"-------------------------------";

co2=coroutine.create(function

() for i=1,10

doprint("item",i)

coroutine.yield();

endend)

print(type(co2));

print(coroutine.status(co2));

coroutine.resume(co2)

print(coroutine.status(co2));

print("main 1")

coroutine.resume(co2)

print(coroutine.status(co2));

print("main 2")

print

"-------------------------------";

print

"-------------------------------";

--lua中協程可以通過resume-yield來交換資料

--1.通過resume把引數傳遞給協同主程式

co3=coroutine.create(function

(a,b)

-- body

print("co",a,b);

end)

print(coroutine.resume(co3,1,2))

print

"-------------------------------";

print

"-------------------------------";

--2.資料通過yield傳遞給resume,true表示傳遞成功,true之後的部分即是yield的引數

co4=coroutine.create(function

(a,b)

-- body

coroutine.yield(a+b,a-b);

end)

print(coroutine.resume(co4,1,5))

--3.把resume的引數傳遞給yield

print

"-------------------------------";

print

"-------------------------------";

co5=coroutine.create(function

() -- body

print("co5",coroutine.yield());

end)

coroutine.resume(co5);

coroutine.resume(co5,4,5);

Lua 程式設計 協程

乙個協程 coroutine 與執行緒 thread,這裡指 多執行緒 中的執行緒 類似 它是乙個執行序列,擁有自己的棧,區域性變數,指令指標,但是與其他的協程共享全域性變數和其他大部分東西。從概念上講,協程與執行緒最大的區別是 在乙個多處理器機器上,乙個多執行緒程式可以並行地執行多個執行緒。而協程...

Lua學習 協程

print 協同程式 print 協程的建立 常用方式 coroutine.create fun function print 123 end co coroutine.create fun 協程的本質是乙個執行緒物件 print co print type co coroutine.wrap co...

lua協程再探

lua語言的協程中yield關鍵字可以掛起當前coroutine執行,並暫時儲存臨時變數值,該值即是第二次呼叫 resume 時傳入的引數!co coroutine.create function value1,value2 local tempvar3 10 print coroutine sec...