源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Lua之协同程序coroutine代码实例

  • 时间:2021-04-22 11:40 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Lua之协同程序coroutine代码实例
do
 --create coroutine table
 --coroutine state: suspended, running, dead, normal
 --when create the coroutine, the status is suspended, After calling it, the status is dead
 --get the coroutine status by the way coroutine.status
 local coA = 0;
 local coB = 0;

 function createCoroutineA()

  coA = coroutine.create(
          function()
           --for i = 0, 10 do
            print("coA: ", 0);
            print("coB status: ", coroutine.status(coB)); --normal status
            print("coA status: ", coroutine.status(coA));
            print("coA coroutine next status");
            --coroutine.yield();--the current coroutine is suspended
           --end
          end
         );
  print("From coA to resume coB");
 end


 function createCoroutineB()

  coB = coroutine.create(
          function()
           --for i = 0, 10 do
            print("coB: ", 0);
            print("coA status: ", coroutine.status(coA));
            coroutine.resume(coA); --when resume coA, the coB will suspended, calling coB ,the coA status is
            --suspended and dead, this time will continue to execute the next code
            print("coB status: ", coroutine.status(coB));
            print("coB coroutine next status");
            --coroutine.yield();
           --end
          end
         );
  print("From coB to resume coA");
 end

 --display the coA and coB status
 createCoroutineA();
 print(coroutine.status(coA));

 createCoroutineB();
 print(coroutine.status(coB));

 coroutine.resume(coB);
 print(coroutine.resume(coB)); --if the coroutine is dead ,the resume will resume false, and can't resume the dead coroutine
 --print("coA status: ", coroutine.status(coA));
 --print("coB status: ", coroutine.status(coB));
end
注: resume得到返回值, 如果有对应的yield在wait resume,那么yield的参数作为resum的返回值,第一个返回值表示coroutine没有错误,后面的返回值个数及其值视yeild参数而定。 如果没有yield在wait,那么返回值是对应函数的返回值,:true,* * *
do
 --create coroutine table
 --coroutine state: suspended, running, dead, normal
 --when create the coroutine, the status is suspended, After calling it, the status is dead
 --get the coroutine status by the way coroutine.status
 local coA = 0;
 local coB = 0;

 function createCoroutineA()

  coA = coroutine.create(
          function(paramA, paramB)
           --for i = 0, 10 do
            print("coA: ", 0);
            coroutine.yield(paramA, paramB);--the current coroutine is suspended
           --end
           return 100, 200;
          end
         );
  print("From coA to resume coB");
 end


 function createCoroutineB()

  coB = coroutine.create(
          function()
           --for i = 0, 10 do
            print("coB: ", 0);
            print("coA status: ", coroutine.status(coA));
            coroutine.resume(coA); --when resume coA, the coB will suspended, calling coB ,the coA status is
            --suspended and dead, this time will continue to execute the next code
            print("coB status: ", coroutine.status(coB));
            print("coB coroutine next status");
            --coroutine.yield();
           --end
          end
         );
  print("From coB to resume coA");
 end
 createCoroutineA();
 --if not yield is waiting ,the return values that the main function return as the results of the resume
 --or the return as the yield params
 print( coroutine.resume(coA, 10, 20));--OutPut:true, 10, 20



end
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部