‫お帰りなさい｡
‫前回のビデオでは､ スレッドの使い方と､ 脅威を設定して簡単にスレッドを開始する方法をご覧いただきました｡
‫そして､ このビデオでは､ 完成の様子をご覧いただきます｡
‫つまり､ スレッドを使って何かを行い､ 特定のタスクが完了した場合のみ､ 先に進みたいのです｡
‫では､ その様子を見てみましょう｡
‫私はタスク完了ソースという新しい変数を作成するので､ 新しいタスク完了ソースとブーリアンが必要です｡
‫つまり､ このタスク完了のソースが何であるかが分からないために､ 文句を言っているのです｡
‫そして､ それを解決するために､ 私は sys threading タスクを使用する必要があります｡
‫だから､ ちょっとやってみようと思うんです｡
‫そして､ ここにも｡
‫次に行うのは､ テスト用の変数を作成することです｡
‫タスクというのは､ タスクの完了ソース､ つまり､ このタスクの完了ソースと呼んでいるだけなんです｡
‫そして､ そのタスクを結果に設定します｡
‫だから､ そのタスクの結果が欲しいのです｡
‫そこで､ ある特定のタスクが実行され､ 何かを行うべきで､ その結果を見たいとします｡
‫それで､ うまくいったか､ うまくいかなかったか､ それをテストするために､ この赤い線を消すんです｡
‫そこで､ このmainメソッドには何もないものとして､ ここにあるコードだけを実行します｡
‫だから､ 実行するんです｡
‫そしてご覧の通り､ 何も起こりません｡
‫このコンソールの赤線がないにもかかわらず､ コンソールが生きている､ あるいは開いているということは､
‫通常､ コンソールを開いておきたい場合は必ず使うものですが､ それは何か終わっていないものがあるということなのです｡
‫だから､ ここは結果が出ないから､ 実は終わらない｡
‫つまり､ この補完ソースは実際に完了することはないので､ trueに設定されることはないのです｡
‫そしてそれは､ 私たちが手作業でできることです｡
‫つまり､ あるタスクがあって､ ここにあるような結果を得たいのですが､ 実はそのタスクを一旦終了させたいということがあるとします｡
‫では､ そのために必要なことは何かというと､ スレッドを作成することです｡
‫そこで､ var thread is equal
‫to new threadを作成し､ そのスレッドは直ぐには開始されないようにします｡
‫だから､ こことはちょっと違うアプローチでやっています｡
‫ここでは､ 新しいスレッドと言っただけで､ スレッドの本文があるわけです｡
‫そこで､ このスレッドが開始されるたびに実行されるべきコードに､ 私たちはすぐに開始した､
‫すぐに開始した｡
‫しかし､ ここではスレッドを作成するだけで､ 後からいろいろなことができる｡
‫だからここでは､ スレッドスリープと言うことにしています｡
‫そこで､ 例えば1000ミリ秒だけスリープして､ その後､ タスクの完了ソースをtrueに設定して､
‫tri-setの結果を得ようとします｡
‫これは､ タスクの状態をrun to completionの状態に移行させようとするもので､
‫つまり､ 完了したのでdoneをtrueに設定しようとします｡
‫つまり､ このタスク完了のソースがtrueに設定されることになります｡
‫そして､ その作業の結果であるこのVARを手に入れることができるのです｡
‫では､ ちょっと作ってみましょう｡
‫ここに踏み込んでください｡
‫そこでデバッグステップで､ スレッドIDを確認してみましょう｡
‫そして今､ スレッドを開始するために､ 実際にスレッド開始を呼び出す必要があります｡
‫そして､ ご覧のようにこのスレッドオブジェクトは､ これらすべてを行うスレッドが開始されることになります｡
‫というわけで､ こんな感じでスレッドを立ち上げて､ ついでにスレッドの内容も見てもらおうかと思います｡
‫そのため､ スレッドオブジェクトを作成するたびに､ 複数のプロパティとメソッドを使用することになります｡
‫あるいは､ ここで複数のものを使うこともできる｡
‫つまり､ ボードはスレッドを中止することができるもので､ スレッドを停止することができますが､ それは例外を実行するか､
‫例外が発生することになります｡
‫だから､ それをやるのは非常に危険なことなんです｡
‫ですから､ セキュリティがどのように構築されたかに基づいて､ それでアプリケーションをクラッシュさせることができます｡
‫しかし､ 掲示板というのは､ もちろんスレッドを止めるために使うものですが､ どこまで実行されているかはわからないものです｡
‫そのため､ 自分がやりたいと思ったタスクが実行されず､ プログラムが正しく動作しなくなることがあります｡
‫もちろん､ 他にも興味深いメソッドがたくさんあります｡ 例えば､ is aliveはこのスレッドが現在生きていることを意味し､
‫is backgroundはスレッドがバックグラウンドで実行されるべきことを意味します｡
‫バックグラウンドかどうかは､ スレッドへの脅威となる｡
‫それは､ 後ほど確認させていただきます｡
‫では､ スレッドプールとは何でしょうか？
‫それが後々､ 見えたりするんです｡
‫つまり､ マネージド・スレッドIDはかなり興味深いもので､ 現在実行しているスレッドのIDについて教えてくれるものなのです｡
‫では､ それを使って､ コンソールにプリントしてみましょう｡
‫では､ ご覧くださいwそして､ スレッド番号をこのようにさせていただきます｡
‫ドル記号を使い､ スレッド番号やスレッドIDを持つので､ それを呼び出すことができるわけです｡
‫そして､ 中括弧の中には､ スレッドマネージドIDを使うわけです｡
‫スレッド管理されたスレッドIDです｡
‫もちろん､ 文字列も閉じる必要があります｡
‫よし､ ではテストしてみよう｡
‫コードを実行してみましょう｡
‫そして､ 私たちは私たちの本スレッドを持っています｡
‫そして今のところ､ ゲーム機には何かある｡
‫ご覧の通り､ スレッド番号は3です｡
‫つまり､ このスレッドの数は3つで､ 管理されているメインスレッドのIDは1つです｡
‫このように､ 実は数字は期待するような形でなくてもいいんですね｡
‫だから､ ここに自分たちの追加スレッドを作っていないにもかかわらず､ 1から3になる｡
‫だから､ ここにはない別のスレッドが動いているはずなんです｡
‫わかりました｡
‫ついでに言うと､ スレッドの開始と終了の有無を確認したい場合は､ 以下のようにすればよい｡
‫だから
‫そこで､ ここでそれをカットして､ この行に入れましょう｡
‫そして､ 実は､ スタートとここが違うということにしましょう｡
‫threadはここで作成するスレッドなので､ threadは使えません｡
‫しかし､ ここでスレッド本体内で使用したい場合は､ スレッドドットカレントスレッドを使用する必要があります｡
‫だから､ 今それをやると､ 今のようなスレッドができてしまう､ まさにそれです｡
‫そして､ ここでは「始まった」と言い､ 終わった後は「終わった」と言います｡
‫そして､ 今度は実行してみましょう｡
‫それは､ コードを実行することです｡
‫そして､ ご覧の通り､ コンソールには何も表示されません｡
‫次のステップに進みましょう｡
‫そして､ 始まり､ 終わりを迎えた｡
‫だから､ あっという間だった｡
‫しかし､ ご覧の通りです｡
‫だから､ もうちょっと時間をかけてみよう｡
‫5秒に変えてみよう｡
‫そして､ ここのデバッグポイントも消して､ 実行してみましょう｡
‫それでスレッド3番が始まって､ しばらくして完成になったんです｡
‫これで､ このコードの行が実際に正しく実行され､ 単にコンソールを停止していることがわかります｡
‫そこで､ コンソールを開いたままにしておくために､ コンソールの読み取り行を取得しましょう｡
‫つまり､ 3番目のスレッドが始まり､ その5秒後にスレッド3番が終了するはずです｡
‫では､ 実際に作業しているところを見たいとします｡
‫だから､ それをtrueに設定するかどうかでうまくいったかどうか｡
‫そうでなければ､ 次のステップに進めないからです｡
‫でも､ ここではコンソールの右のラインを使いましょう｡
‫タスクは完了したので､ ここではテストとなる結果を書くだけです｡
‫だからテストは､ この通り､ うまくいったかいかなかったかのどちらかなので､ ただの鉢合わせです｡
‫だから､ これを真か偽かで売るんです｡
‫では､ 確認してみましょう｡
‫そして､ 今度は5秒間待つ必要があります｡
‫3番は5秒後に開始し､ 3番は終了し､ タスクが行われたと言うのはtrueと同じです｡
‫このラインはそうなっているんですね｡
‫つまり､ 単にこの特定のタスクで終わったというだけなのです｡
‫わかりました｡
‫さて､ 今回のビデオでは､ タスクが完了したかどうかを示すタスク完了ソースの使い方をご覧いただきました｡
‫trueに設定することもできますし､ 単に何かをして終わりということもできます｡
‫しばらくすると､ 別の方法でスレッドを作成できることもわかりました｡ 実際にスレッド変数を作成し､
‫それをもちろん起動しなければなりませんが､ 単にクラススレッドのオブジェクトのように使用することができます｡
‫そして､ その特定のスレッドのIDを知るために､ 管理スレッドIDを使用する方法を確認しました｡
‫次のビデオでは､ 複数のスレッドを同時に作成し､ それがマシンによってどのように処理されるかについて､
‫もう少し詳しく見ていきます｡
‫それでは､ 次のビデオでお会いしましょう｡