作者热门文章
- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想插入 备注 关于要在我的 latex 文档的特定位置进行的修复 也许有一个 列表的“待办事项/修复我” 你怎么处理这个? 似乎一种方法是使用 fixme 包,但我无法使其工作。 有人在用吗? 最佳
错误:无法创建表。我已经创建了一个数据库,并且已经提供了所有特权。但仍然无法登录协作模块。我受够了,但我不想放弃。我已经尝试了所有可能的方法,但都行不通。 Stackoverflow 是我所知道的最好
我是一名优秀的程序员,十分优秀!