LAST UPDATE 1998/07/01


『 その3-4 』



 ■ テストプログラム


 では先ほどのプログラムを動かしていた間にウインドウズでは何が起こっていたのであろうか。
 ウインドウズは基本的に起動しているプログラムが 「 何かしてほしい 」 というのを待っているのである。
 起動時にテストプログラムは 「 自分を表示してほしい 」 と要求した。それでウインドウズは決められたサイズや場所にそのウインドウを表示したのである。
 表示し終わってしまえば何も要求しないのでウインドウズも何もしない。そして 「Start」ボタンをクリックすると、 「 Picという場所に TEST という文字を表示してほしい。 」 という要求が出され、ウインドウズはそれを処理するのである。
 この要求を 「イベント」と呼ぶ。イベントが起こらなければ何も起こらないのである。
 さて、またわけのわからない例を出そう。文章ばかりで申し訳ないのだが、このあたりの処理の流れはウインドウズアプリを作る上でとてつもなく大切なのである。これが理解できていないと、今後必ず壁につきあたる。
 また、このあたりが以前のDOS上で開発していたプログラムとの決定的な違いなのである。

 聖徳太子になりきれなかった男である。彼は10人の弟子と会話をしていた。しかも聖徳太子の真似をして、弟子達に「同時に話しかけて良い。」 と言ってみた。ところが実際にやってみると、無理であることが判明した。
 そこで彼は 「 私の方から順番に話しかけていくから、その時だけ私と話しなさい。 」 ということにした。
 この方法はうまくいったのである。ところがである。順番に話しかけていっても、その弟子が毎回必ず話題を持っているとは限らないのである。
    「何かないか?」
    「いいえ今回私は話題がありません。」
    「ええぃ、時間を無駄にしてしまったではないか!」
    「申し訳ございません。」
    「うるさい! もうおまえの事などもうかまってやらぬわ」
    「そんな事言ったって、先生が自分で決めた規則ではないですか。」
    「だから、腹が立つと言っているではないか…」
ということで、用事のない弟子のところへ行くと時間を無駄にするということに気づいたのである。
( この先生実はあまり賢くない。だから聖徳太子にはなりきれなかったのだが … )
 そこで、また新しい方式を考えた。 「 私に用事のある人は手を上げなさい。 」 である。
 この 「 手を上げる 」 という行為がウインドウズでは 「イベント」 になるわけである。
 かくしてその男は 「 先生 」 という名前のパシリになったのであった。



 ■ 先生の恋人プログラム


 この男の10人の弟子の中には一人だけ女性がいたのである。彼女は先生に恋していた。先生もその状況をまんざらでもないと思っている。しかし、困ったことに彼女は独占欲が強い。
    「 先生、質問があります。」
    「 なんだね。何でも聞いてみなさい。」
    「 実は私 … 」
    「 そういうわけには … 」「 … 」「 … 」(数分経過)
    「 それじゃあ、他の弟子も呼んでいることだし、行くよ。 」
    「 だめ、わたしとずっといっしょにいて。 」
    「 そういうわけには … 」「 … 」「 … 」(数分経過)
かくして、他の弟子達はひたすら待ちつづけるのであった。
 
 では先ほどのプログラムをちょっと改造してみよう。
    Dim i&
    For i = 0 To 1000000-1
    Pic.Print ("TEST")
    Next i
と書き換えて実行してみてほしい。これはピクチャーボックスに100万回TESTと書き込むプログラムである。当然このループが終わるまでの時間はすごく長い。 実行してみよう。「Start」をクリックした瞬間にピクチャーボックスに文字の書き込みがスタートする。
 そして次にツールバーのストップボタンかフォームのクローズボタンをクリックしてプログラムを止めよう。

 …止まらないであろう。これが「先生の恋人」プログラムなのである。
 このプログラムは100万回の処理を終えるまで他の処理する機会を与えないのである。ちなみに強制ストップは Ctrl + Break である。VBでプログラムが固まったと思ったときはまず Ctrl + Break である。それでだめなら Alt+Ctrl+Delete で、さらにそれでだめなら電源落しかリセットボタン攻撃なのである。
 ここではよろしくないプログラムのパターンを紹介した。



その3-1 | その3-2 | その3-3 | その3-4 | その3-5 | その3-6

『 サルのゲーム製作講座 』 目次 | その 1 | その 2 | その 3 | その 4 |
その 5 | その 6 | その 7 | その 8 | その 9 | その 10 | その 11


もどる

e-mail: sc_3da@magical2.egg.or.jp