322.割り込み
EXCELの話
普通のソフトだとフォームの中の
ボタンを押したら機能なりスイッチが
動作するというのが一般です。
EXCELもそうしたフォームを表示し
ボタンで動作することもできますが
それ以外に
アクションを起こすことができます。
たとえば
セルをダブルクリックしたときとか
セルの値が変化したときなどです。
そのアクションが起こったとき
それぞれのマクロプログラムを動作させることが
できます。
それに関連しますが
そのEXCLE VBAで
無限ループ状態になったことがありました。
プログラムの要約は
セルの値が変化したらというアクションで
プログラム起動
計算処理して
そのセルに値を書き込むというプログラム。
まず最初にセルに値を書き込んだら
アクションがおき
計算結果をセルに代入したら
セルが変化しそのイベントにより
またプログラムが起動して
という無限ループに陥りました。
(正確に言うと200回ほどでEXCELが無限と判断して
止まるようになっていました)
普通プログラムの無限ループは
速いことが多く目に見えないぐらいの速さですが
このアクションループは
見た目に分かるほどの遅いループです。
しばらくその遅いループをみていて
思ったことですが
このループ中に他のイベントが起きたらどうなるのか?
と思い下のプログラムを例に確認してみました。
testという変数はどちらも有効な
グローバル変数としています。
command1は
testという変数に3000000回カウントして
表示するというプログラムです。
command2は
testという変数に1000を入力する
というプログラムです。
command1、2はボタンをおしたら起動します。
command1
ボタンを押したら
しばらくすると
30000000という答えが表示されました。
次からが実験です。
command1ボタンを押して
すかさずcommand2ボタンを押したら
どうなるか
結果は
30000000ではなく
2537140とか変な数字がでました。
ループ中の計算途中で
command2のボタンを押して割り込みが
かかり
変数testに1000代入して
カウント再開するため
変な数字になりました。
個々のプログラムで動かすと正しく動くけれど
想定していない操作を起こすと
どうなるか分からないということ
確かにDOSでは無かった事です。
だからWindow sなんですね
|