子供の知育の為に、記憶力テストができるアプリケーションを作ってみよう。Step3です。
【仕様】
3x3の格子状に9つの絵を表示。
10秒後に非表示。
紙に覚えている限り書く。
答え合わせをする為に答えを表示する。
前回(Step2)は、
複数のピクチャボックスにランダムにかつ被らずに画像を表示させました。
Step2では3つのピクチャボックスでしたが、仕様に基づいて、9個に増やしてみましょう。
※自分の力でやってみましょう
本題のStep3です。
【開始】ボタンを押したとき、Sleepで10秒待たせています。
この方法だと、10秒間アプリケーションを触ることが出来ず、
フリーズしていると勘違いされてしまいます。
そこで、課題解決の為にスレッドを使います。
スレッドとは
スレッドって何っっ!?って感じですよね?
簡単に言うと、複数の処理を同時進行する方法です。
同時進行する方法は、【並行処理(Thread)】と【並列処理(Task)】の2つがあります。
同じようで若干違います。ちなみに、つい最近まで自分は同じだと思っていましたwww
【並行処理】とは、一人で複数の事を事です。
『電話で友人と会話しながら、ゲームをする』とか『スマホを見ながら、歩く』とかですね。
【並列処理】とは、複数の人で複数の事を同時にやる事です。
【妻は料理をしている間に夫は育児をする。】とか【洗濯機を回している間に食器洗いをする】とかです。
絵で表すと下記の通り
今回は【並行処理(Thread)】を使いますが、今の流行は【並列処理(Task)】らしいです。
次回は【並列処理(Task)】で作りたいと思います。
スレッドを作成し、実行してみる
実際にスレッドを作る手順は下記の通り
①スレッドにしたい処理の関数をつくる。 ②スレッドのインスタンスを作る。 ③スレッドを開始する。 ④スレッドが終わるのを待つ(確認する)
《①スレッドにしたい関数をつくる》
今回は、10秒間のスリーブを関数にします。
《②スレッドのインスタンスをつくる》
まずは、10秒のスリープをコメントアウトします。
続いて、先ほど作った関数を実行するスレッドを作ります。
《③スレッドを開始する》
先ほど作ったスレッド(wait_10sec)の関数Startを使います。
実行してみましょう。一瞬で処理が終わります。
これは、10秒のスリープが並行で動いている為、次の処理に行き、画像を消してしまいました。
その為、スレッドが終わるのを待ちましょう。
《④スレッドが終わるのを待つ》
スレッドが実行中かを確認するのはIsAliveプロパティを使用します。
実行中:True/終了:False
これで、スレッド(Sleep10秒)が終了したら、次の処理に行くようになります。
先ほどは、10秒の間ウィンドウを触る事が出来ませんでしたが、
スレッドにする事でウィンドウを触る事ができるようになりました。
まとめ
同時に処理する方法として、【並行処理】と【並列処理】がある。
並行処理がThreadの事で、1人で一生懸命複数の事を同時に処理する事。
同時に処理したい内容を関数にして、スレッドを作る。そして、実行する。
使い方次第だが、スレッドが実行中か確認し、終了したら次の処理へ。
業務でプログラミング(C#/VB/Python)を作っている。
挫折を何回も繰り返し、幾度の壁を乗り越えてきた。
乗り越えてきた事を忘れないように記録に残す。
同じ思いをしている人への情報提供になれたらと思う。
基本は初心者に向けたプログラムの情報を提供する。
コメント