UJMLサンプル101:ステート変数の挙動を学ぶ→scriptブロックから外に出ないと次の処理はできない(2006/04/20)
今回紹介するサンプルは今までのような描画系のものではなく、ステート変数という特殊な変数にのみフォーカスする。リファレンス中を読んでいると時々出てくるが、
・UIEngineは処理が<script>ブロックの外に出ないと、次の処理を行わない。
という性質がある。
<script>
sLabel = false;
sLabel = true;
無限ループ
</script>
というソースを書くと、sLabelの再表示はいつになっても行われないということだ。(sLabelには適当なヴィジュアルエレメントが定義されていると仮定)
もちろん、他のイベントの割り込みもできない。例えば、ボタン押し下げでイベント処理をする次のようなものも、
<display>
<box>
<event name="onSelect">
<accelerators><key>FIRE</key></accelerators>
<script>
sHoge = false;
sHoge = true;
</script>
</event>
</box>
</display>
先程の「無限ループ」実行中は、処理されない。
簡単な例をサンプルで作成し、ダウンロードできるように貼り付けたので試して欲しい。このソースでは一生懸命sLabelを表示しようとするが、無限ループ処理のため絶対に表示されないのだ。
別の言語では、無限ループでポーリングし、グローバル変数の値を見て、適宜ループを抜けるようなことをするが、UJMLではそれができない。それならどうすべきかは、次回以降に。
コメント