gpt4 book ai didi

Lua之协同程序coroutine代码实例

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Lua之协同程序coroutine代码实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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,* * * 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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

  。

最后此篇关于Lua之协同程序coroutine代码实例的文章就讲到这里了,如果你想了解更多关于Lua之协同程序coroutine代码实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com