2012年7月8日日曜日

[ドリトル] GUIイベントの同時実行性

ボタンを押してアクションが実行されるのだが、実行中も少なくとも見た目上はGUI操作などはブロックされておらずバックグランド的に動いているように見える。

確認してみよう。

t1 = Turtle ! create.
t2 = t1 ! create.
t2 ! penup 200 forward.
btn1 = Button ! "No.1" create.
btn2 = Button ! "No.2" create.
btn1:action = [ t1 ! (l1) xcircle].
btn2:action = [ t2 ! (l2) xcircle].

l1 = Label ! "***********" create.
l2 = Label ! "***********" create.

t1:xcircle = [ | myLabel |
  myLabel ! "draing..." set.
  [
    self ! 1 forward 1 rightturn.
  ] ! 360000 repeat.
  myLabel ! "done" set.
].

Turtle とボタンを2つ用意して、各ボタンでそれぞれのTurtleが動き出すようにする。
円を描画する操作が割とあっという間に終わってしまうので、過酷ではあるが1000回転ほど回ってもらうことにする。

ちなみに、xcircle命令はt1にしか定義していないが、t1 は t2 の親オブジェクト(プロトタイプ)なのでt2側でもこのxcircle命令を使うことができる。
最初のボタンを押して第一Turtleが回転開始後、すかさず2番目のボタンを押す。


過酷すぎたのか描画にノイズが乗ってしまった。

でも、アクション実行中にも他アクションの実行を受け付け、かつ、複数のアクションが同時に実行されていることが分かった。
だからやってみなくちゃわからない。

0 件のコメント:

コメントを投稿