Scratch 教程:3 技术(3/3)

2.15 ⼴播消息

发送消息允许启动任意代码段。如果有多个接收器,它们显然都是同时启动的。然⽽,在现实中,控制在不同过程之间迅速切换。

2.15.1 同时接收器

在这里,我们看到消息 1的⼴播已经结束,2 个接收块仍然处于活动状态。

图片[1]-Scratch 教程:技术

2.15.2 ⼴播等待

⼴播和等待块⼀直等到最后⼀条消息完成。在这里,我们看到第⼀个堆栈已完成,⽽第⼆个堆栈仍在执行中。

图片[2]-Scratch 教程:技术

2.15.3 多线程

当两个堆栈同时执行时它是如何⼯作的?让我们试着了解会发⽣什么。我们将创建⼀个msg列表,每个进程在执行时都会在其中创建⼀个条⽬。两个进程(1 和 2)同时运行并执行⼀个循环 1000 次。

条⽬是:

进程号(1 或 2) 计时器在开始时,计时器被重置。

图片[3]-Scratch 教程:技术

结果是,对于 1000 次迭代中的每⼀次,两个过程交替进行。在每次迭代期间,每个⼈都会轮到⼀次。

图片[4]-Scratch 教程:技术

2.15.4 在线程内等待

当我们在其中⼀个进程中引⼊额外的等待时会发⽣什么?假设我们在进程 1 中引⼊了 1 毫秒的等待时间。进程 2 会获得更多运行时间吗?

图片[5]-Scratch 教程:技术

结果是好奇。进程 1 和进程 2 仍然交替,但现在进程 2 在进程 1 的等待时间内获得了第⼆次运行的机会。总体结果是进程 2的运行频率是进程 1 的两倍。

等待块有 1 毫秒的等待时间,但实际上等待与 33 毫秒的内部屏幕刷新计时器对⻬。

图片[6]-Scratch 教程:技术

这两个进程交替直到索引 1500,此时进程 2 已完成 1000 次迭代并终⽌。

过程 1 ⼤约每 33 毫秒再继续进行 1000 次迭代。总时间为 33 秒。

2.15.5 执行顺序

进程按什么顺序执行?⼀点点实验表明这些过程是按照它们的创建顺序执行的。此顺序⽆法更改。复制粘贴上⼀个过程会在最后⼀个位置创建⼀个新过程。

图片[7]-Scratch 教程:技术

每个进程将其进程号添加到变量seq。我们看到

  • 进程 1 和 2,它们在同⼀个 sprite 中
  • 进程 3 在不同的 sprite 中
  • 进程 4 在舞台

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片