[Powered by Google Translate] NATE HARDISON:あなたは上で複数のプログラムが開いて持っている コンピュータ、それがすべてのように思える 同時に実行されている。 たとえば、次のようなWebブラウザで動作している可能性が FirefoxやInternet Explorer、iTunesで音楽を聴いて、 とWordでエッセイを書いて。 しかし、ボンネットの下に、実際にプログラム 一度に1つずつ実行。 それには、Windows、Mac OSXオペレーティングシステムの仕事ですか、 としてLinux、これらの個別の各プロセスを管理するためには、 プログラムが知られている、としたときにするようにそれらを切り替えるアール あなたのエッセイの作業に自分のFacebookのページをチェックしてから行く 再度、Wordが実行しているものです。 しかし場合によっては、我々はプログラム自身ができるようにしたい あまりにも、このように複数のことを行う。 あなたが私と同じなら、あなたはおそらくの束を持っている Webブラウザで開いている別のタブ、電子メールのための1、 カレンダーと1、というように。 我々は、別のプログラムまたはプロセスとして、各タブを扱うことができる Google Chromeのように行いますが、多くのプログラムが使用 プロセスの軽量バージョンでは、スレッドと呼ばれる。 スレッドは処理のちょうど別のユニットのセットです。 "実行する"ことができる命令またはコード、いわば、 同時に他のスレッド付き。 これにより、あなたがFacebookを閲覧するために作るものです バックグラウンドで私の話を聞いたり2持っている間 YouTubeの動画を同時に再生します。 だから、並行性として知られているこのような一般的なトピックは、典型的には、 こんなに早くコンピュータサイエンスのコースで出てこない 低レベルの詳細は、の議論を必要とするため、 オペレーティングシステムなど。 しかし、プログラミング言語は我々で使用 CS50の始まり、スクラッチ、にいくつか気の利いたツールを提供しています それが簡単に複数のものを使用してプログラムを書くことができるよう 一度起こっている。 あなたがスクラッチプログラムを構築するときは、常にしている スレッドでの作業。 で始まるコードブロックです各スクラッチスクリプト、 "いつ"パズルのピースの一つは、考えることができます 別のスレッドとして。 どのようにこの作品を見て、単純なスクラッチプログラムを見てみましょう。 ここでは、2つのスクリプトが、魚のオブジェクト、またはスプライトを持っている 我々は少し緑の旗のボタンをクリックすることは、startの両方。 最初のスクリプトは、魚の動きを制御します。 緑の旗をクリックすると、魚が置かれます 画面の左側に、ステージと呼ばれる、 右側に面しています。 そして、永遠に実行することになるでしょう一連の指示で、私たちまで プログラムを停止し、魚は、右側に滑る 、回る左側に戻り、 再び回る。 番目のスクリプトは、魚の思考プロセスを制御します。 これが飢えた魚であることが判明した。 だから3秒待った後、魚は、と思うだろう 4秒のために "私は飢えている"。 また、このスクリプトは永遠に実行されます。 そして、我々が見たように、クリックしてプログラムを実行してから 緑の旗、両方のスクリプトが実行されるように見える 同時に。 魚が移動し、同時に考えている。 貧しい魚は飢えて見えるので、いくつかに追加してみましょう それは食べるために安っぽいパフ。 うまくいけば、彼らは水の中で崩壊しません。 我々は第二スプライトに追加すると、我々はまた、ができるようになります そのスプライトに対応するスクリプトに追加します。 そして、それ故に、別の組があるだろう 実行することになるでしょうスレッド。 ときに我々のプログラムのユーザに与えるには支配 飢えた魚が餌を取得し、みましょうと言うそのたびにスペース バーにヒットした、安っぽいパフがステージに現れる 食べる魚。 我々はスペースバーを叩く前に、我々は、安っぽいを維持したいと思う パフは、魚がそれらを見ることができないように隠れています。 これを行うには、我々のためのスクリプトがいくつ必要になるでしょう 安っぽいパフスプライト。 最初のスクリプトは、緑のフラグは、単に食べ物を非表示になります。 私たちが書いた他のスクリプトとは異なり、この1つは保持されません 永遠に実行されている。 我々は、右クリックしたときに、それは、非常に迅速に開始し、終了します 緑の旗のボタンをクリックします。 我々が持っている次のスクリプトは、なるようにスペースバーを待ちます 実行する前に押した。 私たちは、 "待っている"や "リスニング"ユーザーの入力を待機して呼び出すことができます。 イベント用。 イベントが受信されるときに実行されるコードや 聞いたことは、イベント処理コードと呼ばれています。 私たちのスペースバーイベントハンドラは上安っぽいパフが表示されます 魚はそれらを食べることができるように画面が表示されます。 この時点で、すべてが良い見ている。 次にすることは、取得する方法を見つけ出すことである 魚が食べる食べ物があることを実現する。 その常に魚に別のスレッドを追加してみましょう それは安っぽいパフに触れているかどうかをチェックします。 我々は、我々ができるような方法でいるので、別のスレッドでこれを行う 常に食べ物を確認してください。 そうでなければ、我々は定期的にしか食べ物を確認することができると思います グライダーの間に、待っている、または考えて、回って。 [OK]をクリックします。 現在、私たちのスクラッチ·プログラムを実行してみましょう。 予想されるように、食べ物はすぐに非表示になり、 直前のように前後に飢えた魚の泳ぐ。 我々はスペースバーを押すと、安っぽいパフは、視界に入る と空腹の魚がほーと言います。 しかし、奇妙なこと、待つ。 魚の "おなかがすいた"思想割り込みなんで 他のもの? 我々は、任意の調整を確立していないためです 3魚のスクリプト間。 それぞれが何を気にとめない、独自のスレッドで実行されている 他の人がやっている。 我々が移動する前にこの問題を解決してみましょう。 スレッド間の連携は、我々からトリッキーな作業です 各スレッドが実行されるときに明示的に制御を持っていないか、または 実行されません。 あるスレッドから別のスレッドにメッセージを送信するために、我々は必要となります 1スレッドで、我々が設定、または書き込み可能な変数を使用する と他で読んだ。 我々が設定できるという変数foodFoundを作成してみましょう 魚が安っぽいパフに実行したときにtrueを返します。 まあ、もちろん、我々はそれを設定することを確認したい 最初はfalse。 場合は、魚の思考のスレッドで、私たちは見て確認してみます 魚は "おなかがすいた"が表示される前に食品を発見した バブルは思った。 さて、プログラムを再度実行して、我々はその魚を見る 飢餓の思いで中断されないとき 安っぽいパフが出ている。 我々が持っている最後の問題は安っぽいパフは行かないということです 離れて魚の後に、いわば、彼らを "食べる"。 魚のスクリプトから、安っぽいを隠すための簡単​​な方法はありません パフは、私たちは安っぽいパフにメッセージを送信する必要が それ自身を隠す、スプライト。 我々は、別の変数を使ってこれを行うことができ、その安っぽいパフ スプライトはへのアクセスだけでなく、魚のスプライトを持っています。 しかし、この場合にはこれを行うためのクリーンな方法は、あります ため、代わりのスクリプトにメッセージを送信するの どこかに実行の途中で、私たちは送ることができます 開始するために待っているスクリプトへのメッセージ。 私たちは、魚を持っていることによってこれを行うには、我々はよイベント、1を放送 食べ呼ぶ。 そこで、我々は意志安っぽいパフのためのスクリプトを作成します このイベントを待ちます。 このことは、これを除いて、スペースバーイベントに似ています 時間は、ユーザが直接イベントをトリガー1ではありません。 今、私たちがしなければならないすべては、私たちfoodFound変数背中が設定されている falseに設定し、そして我々は現在、多くのように飢えた魚を与えることができます それが望んでいるように安っぽいパフのサービング。 だからそんなに悪くないよね? C言語では、マルチスレッドプログラムを書くことは、より複雑です が、基本は同じです。 とにかく、私はあなたには、いくつかの楽しみを構築する素晴らしい時間を持っていることを望みます スクラッチでのコンカレント·プログラム。 私の名前はネイトHardisonです。 これはCS50です。