[Powered by Google Translate] NATE哈迪森:当你有多个程序打开一个 计算机,它似乎是一切的 在同一时间运行。 例如,您可能会在Web浏览器,如 Firefox或Internet Explorer,在iTunes上听音乐, 用Word写文章。 然而,引擎盖下,该方案 在同一时间,运行一个。 这是工作的操作系统,在Windows,Mac OSX, Linux中,每一个单独的进程管理,作为 程序是已知的,它们之间切换,所以,当你 去检查你的Facebook页面,你的文章 再次,Word是一个。 但是,有时候,我们希望自己能够 做多这样的事情,太。 如果你像我一样,你可能有一堆 不同的选项卡中打开您的网页浏览器,一个用于电子邮件, 一个带有日历,等等。 我们可以把每一个标签作为一个单独的程序或进程, 像谷歌Chrome浏览器,但许多程序都使用了 重量更轻版本的过程称为一个线程。 线程是另一个单位的处理,一组 指令或者程序代码,可以在“运行”,报价引文结束, 同时,其他的线程。 这是什么使得它可以为你浏览Facebook 一边听我在背景中,或有两个 YouTube视频同时播放。 所以,一般的话题,被称为并发,通常 不来这么早起来的计算机科学课程 因为较低层次的细节需要讨论 操作系统和等。 但是,我们在使用的编程语言 CS50,开始刮,提供了一些极好的工具, 可以更容易地编写程序时,多重的东西 在一次。 当你建立临时的程序,你不断 工作线程。 每刮脚本,这是一个代码块,开始 “当”拼图之一的,可以被认为是 作为一个单独的线程。 让我们来看看一个简单的划痕程序,看它是如何工作的。 在这里,我们已经得到了一条鱼的物体,或精灵,有两个脚本 都开始当我们点击绿色的小国旗按钮。 第一个脚本控制的鱼类的议案。 当绿旗后,鱼被放入 在屏幕的左侧,称为阶段, 朝向右侧。 然后,在一组指令,将永远运行下去,直到我们 停止该程序,的鱼滑行到右侧, 转了一圈,又回到的左侧, 再转身。 第二个脚本控制鱼的思维过程。 事实证明,这是一个饥饿的鱼。 因此,等待3秒后,鱼会认为, “我饿了,”四分之一秒。 这个脚本也将永远运行下去。 正如我们所看到,运行该程序通过点击 绿色标志,这两个脚本执行 同时进行。 鱼移动,并认为在相同的时间。 由于穷人的鱼看起来太饿了,让我们添加一些 俊俏的泡芙吃。 希望它们不会在水中崩解。 当我们在第二个精灵,我们还可以 添加脚本,雪碧。 ,因此,可以通过另一组 将运行的线程的。 为了让我们的计划控制的用户时, 饥饿的鱼得到的食物,让我们说,只要空间 酒吧被击中,干酪泡芙出现在舞台上的 鱼可吃。 在我们按下空格键,我们将要保留的俗气 喷隐藏,使鱼无法看到它们。 要做到这一点,我们需要一对夫妇的脚本 俗气喷精灵。 第一个脚本,绿色标志,只是隐藏的食物。 不同于其他脚本,我们已经写了,这一次将不会保留 运行下去。 它非常迅速地开始和结束,权当我们点击 绿色环保标志的按钮。 我们将等待下一个脚本的空间酒吧 压,然后再执行。 我们可以通过调用等待用户输入的“等待”或“监听” 一个事件。 而当接收到一个事件或执行的代码 听说是被称为事件处理代码。 我们的空间酒吧事件处理程序将显示俗气喷 在屏幕上,使鱼可以吃。 在这一点上,一切都看起来很不错。 接下来的事情,我们需要做的是要弄清楚如何获得 认识到,有食物吃的鱼。 让我们添加另一个线程来的鱼不断 检查是否接触俗气喷。 我们这样做,因为这样我们就可以在一个单独的线程 经常检查食品。 否则,我们就只能够定期检查食品 之间滑翔,转身,等待,​​或思考。 OK。 现在,让我们从头程序的运行。 正如所料,食品立即隐藏和 饥饿的鱼游,来回像以前一样。 当我们按​​下空格键,映入眼帘的俗气喷, 饥饿的鱼说:哇。 但是别急,这是怪异的。 怎么来的鱼的“我饿了”的思想中断 其他的东西? 这是因为我们没有建立任何协调 之间的鱼类脚本。 每个运行在它自己的线程中,忘却什么 别人在做什么。 让我们来解决这个问题之前,我们前进。 线程之间的协调是一个棘手的任务,因为我们 没有明确的控制,每个线程运行时或 不运行。 从一个线程发送消息到另一个,我们需要 在一个线程中使用一个变量,我们可以设置,或写, 和读取在其他。 让我们创建一个变量称为foodFound的,我们可以设置 真正运行时,鱼到俗气喷。 好了,当然,我们要确保,我们将它设置为 假最初。 然后,在鱼的思想线程的,我们将检查,看看是否 鱼食品后,才显示“我饿了” 认为泡沫。 现在,再次运行程序,我们看到的鱼 不被打断的想法饥饿时, 俗气喷都出来了。 我们的最后一个问题是,不俗气喷 离开后,鱼,报价引文结束,“吃”。 从鱼的脚本,有没有简单的方法来隐藏的俗气 泡芙,所以我们需要将消息发送到的俗气喷 精灵可以隐藏自身。 我们可以做到这一点与另一个变量的俗气喷 子画面有访问,以及鱼的子画面。 然而,在这种情况下,一个干净的方式来做到这一点, ,自而不是将消息发送到一个脚本, 在执行的中间的某个地方,我们可以发送 消息发送到一个脚本,等待开始。 我们做到这一点的鱼事件,我们将播出 呼叫吃掉了。 然后,我们将创建一个脚本的俗气泡芙, 等待此事件。 这是一个类似的空格键事件,除了这个 时间后,用户不是一个直接触发事件。 现在我们要做的是设置我们的foodFound的变量回 为false,我们现在可以给许多饥饿的鱼 份俗气喷,因为它要。 所以不要太糟糕了,对不对? 在C语言中,编写多线程程序是比较复杂的, 但基本是相同的。 无论如何,我希望你有一个伟大的时间来建立一些有趣的 在Scratch的并发程序。 我的名字是Nate哈迪森。 这是CS50。