[Powered by Google Translate] NATE Hardison: Wenn Sie habe mehrere Programme offen auf einem Computer, wie es scheint, alles ist laufen gleichzeitig. Zum Beispiel könnten Sie in einem Web-Browser funktionieren wie Firefox oder Internet Explorer, Musik hören über iTunes, und das Schreiben eines Aufsatzes mit Word. Doch unter der Haube, die Programme tatsächlich laufen nacheinander. Es ist die Aufgabe des Betriebssystems, Windows, Mac OSX oder Linux, zu verwalten jede dieser separaten Prozessen, wie der Programme bekannt sind, und zwischen ihnen wechseln, so dass, wenn Sie gehen von der Überprüfung Ihrer Facebook-Seite, um die Arbeit an Ihrem Essay wieder, ist Word derjenige, der läuft. Manchmal, wenn wir wollen Programme selbst in der Lage sein mehrere Dinge wie diese auch tun. Wenn Sie wie ich sind, haben Sie wahrscheinlich eine Reihe von verschiedenen Registerkarten in Ihrem Web-Browser, ein für E-Mail zu öffnen, eine mit einem Kalender und so weiter. Wir könnten jede Registerkarte als separates Programm oder Prozess zu behandeln, wie Google Chrome tut, aber viele Programme ein leichtere Version von einem Prozess namens einen Thread. Ein Thread ist nur eine weitere Verarbeitungseinheit ein Satz von Anweisungen oder Code, der "run" kann, Zitat unquote, gleichzeitig mit anderen Fäden. Dies ist, was macht es möglich für Sie zu Facebook suchen beim Hören mich im Hintergrund oder zwei YouTube-Videos spielen zur gleichen Zeit. Also, in der Regel diese allgemeine Thema, wie Parallelität bekannt, kommt nicht so früh in der Informatik Kurse weil die unteren Ebene Informationen benötigen Diskussion Betriebssysteme und dergleichen. Allerdings ist die Programmiersprache verwenden wir bei der Beginn des CS50, Scratch, bietet einige nette Tools erleichtern, um Programme mit mehreren Dinge schreiben Dinge auf einmal. Wenn Sie Scratch-Programme zu bauen, sind Sie ständig Arbeiten mit Threads. Jeder Scratch Skript ist, die einen Code-Block, beginnt mit einer der "wann" Puzzleteile, kann man sich als separater Thread. Lassen Sie uns ein einfaches Scratch Programm anschauen, wie das funktioniert. Hier haben wir einen Fisch Objekt oder Sprite, mit zwei Skripte dass sowohl Start als wir auf das kleine grüne Flagge Taste. Das erste Skript steuert der Fische Bewegung. Wenn die grüne Flagge angeklickt wird, wird der Fisch platziert Auf der linken Seite des Bildschirms, die so genannte Bühne, nach rechts weist. Dann, in einer Reihe von Anweisungen, die ewig laufen werde, bis wir Stoppen des Programms, gleitet die Fische zu der rechten Seite, dreht sich um, geht zurück auf die linke Seite und dreht sich wieder um. Das zweite Skript steuert der Fische Denkprozess. Es stellt sich heraus, dass dies ein hungriger Fisch ist. So nach einer Wartezeit von 3 Sekunden, die Fische denken, "Ich bin hungrig", für ein Viertel Sekunde. Dieses Skript läuft auch immer. Und wie wir sehen, von der Ausführung des Programms durch Klicken auf die grüne Flagge, erscheinen beide Skripte ausgeführt werden gleichzeitig. Der Fisch bewegt und hält gleichzeitig. Da die armen Fische sieht so hungrig, lasst uns in einigen hinzuzufügen kitschig puffs für sie zu essen. Hoffentlich werden sie nicht im Wasser zerfallen. Wenn wir in einem zweiten Sprite hinzuzufügen, werden wir auch in der Lage sein Hinzufügen in entsprechenden Skripten zu diesem Sprite. Und daher werde es eine andere Reihe von sein Themen das wird laufen. Um dem Benutzer unseres Programms Kontrolle darüber, wann die hungrigen Fischen erhält Nahrung, sagen wir, dass, wenn das Space Bar getroffen wird, erscheinen kitschig puffs auf der Bühne für die Fisch zu essen. Bevor wir die Leertaste drücken, wir wollen das kitschig halten puffs versteckt, so dass die Fische sie nicht sehen können. Um dies zu tun, werden wir ein paar Skripte für die Notwendigkeit kitschig puffs Sprite. Das erste Skript, die grüne Flagge wird nur verstecken die Nahrung. Im Gegensatz zu den anderen Skripten wir geschrieben haben, wird dies ein nicht halten läuft immer. Es beginnt und endet sehr schnell, direkt, wenn wir auf die grüne Flagge Taste. Das nächste Skript wir haben, warten Sie die Leertaste zu sein drückte vor der Ausführung. Wir können das Anklopfen für Benutzereingaben "Warten" oder "hören" für ein Ereignis. Und der Code, wenn ein Ereignis oder empfangen wird ausgeführt gehört, wird als Event-Handling-Code. Our Space Bar Ereignishandler zeigt die käsigen puffs auf den Bildschirm so, dass der Fisch essen. An diesem Punkt hat alles sieht gut aus. Das nächste, was wir tun müssen, ist, um herauszufinden, wie man die Fische erkennen, dass es zu essen. Wir fügen einen anderen Thread zu den Fischen, die ständig prüft, ob es die Berührung der käsigen Züge. Wir tun dies in einem separaten Thread, da auf diese Weise können wir ständig für Lebensmittel zu überprüfen. Ansonsten würden wir nur in der Lage sein, regelmäßig für Lebensmittel zu überprüfen zwischen Gleiten und drehte sich um, warten, oder denken. OK. Nun wollen wir laufen unsere Scratch Programm. Wie erwartet, das Essen sofort versteckt und die hungrigen Fischen schwimmt hin und her, genau wie vorher. Wenn wir die Leertaste drücken, kommen die käsigen puffs in Sicht, und die hungrigen Fischen, sagt whoo. Aber warten Sie, das ist seltsam. Wie kommt der Fisch Gedanken unterbricht "Ich bin hungrig" die anderen Sachen? Dies ist, weil wir nicht begründet keine Koordination zwischen den drei Fische Script. Jedes Zimmer ist in einem eigenen Thread laufen, vergessen, was der die anderen machen. Lassen Sie dieses Problem beheben, bevor wir weitermachen. Koordination zwischen Threads ist eine schwierige Aufgabe, da wir keine explizite Kontrolle über, wenn jeder Thread läuft oder nicht ausgeführt. Um eine Nachricht von einem Thread zu einem anderen zu senden, benötigen wir eine Variable, die wir eingerichtet haben, können oder schreiben zu verwenden, in einem Thread und in dem anderen gelesen. Lassen Sie uns eine Variable namens foodFound, dass wir festlegen können wahr, wenn der Fisch in den käsigen puffs läuft. Nun, natürlich wollen wir sicherstellen, dass wir es auf false, zunächst. Dann, in der Fische Denken Gewinde, werden wir prüfen, ob der Fisch essen vor der Anzeige des "Ich bin hungrig" gefunden dachte Blase. Jetzt läuft das Programm wieder sehen wir, dass die Fische nicht mit dem Gedanken an Hunger unterbrochen zu werden, wenn die kitschig puffs sind out. Der letzte Problem, das wir haben, ist, dass die käsigen puffs nicht gehen weg nach dem Fisch, zitiere unquote, "frisst" sie. Von den Fischen Script, gibt es keine einfache Möglichkeit, den käsigen verbergen Puffs, so müssen wir um eine Nachricht an den käsigen puffs senden Sprite, um sich zu verstecken. Wir könnten dies mit anderen Variablen zu tun, dass die käsigen puffs Sprite hat Zugriff auf sowie die Fische Sprite. Allerdings gibt es ein sauberer Weg, dies zu tun in diesem Fall, da anstelle des Sendens einer Nachricht zu einem Script, das ist in der irgendwo in der Mitte der Ausführung, können wir die Nachricht an ein Skript, das darauf wartet, zu starten ist. Wir tun dies, indem er den Fisch ausgestrahlt ein Ereignis, ein Wir rufen gegessen. Dann werden wir ein Skript für den käsigen puffs, die schaffen Warten für diese Veranstaltung. Dies ist vergleichbar mit der Leertaste Ereignis, außer dass diese Mal ist der Benutzer nicht das man direkt das Ereignis auslöst. Jetzt müssen wir zu tun haben, wird unsere foodFound Variable zurück auf false, und wir können jetzt geben die hungrigen Fischen wie viele Portionen kitschig puffs wie er will. So gar nicht so schlecht, oder? In C, Schreiben von Multi-Threaded-Programme ist komplizierter, aber die Grundlagen sind die gleichen. Wie auch immer, ich hoffe, Sie haben eine tolle Zeit bauen etwas Spaß nebenläufige Programme in Scratch. Mein Name ist Nate Hardison. Dies ist CS50.