waitmode

hoge1e3 edited this page Oct 11, 2018 · 6 revisions

lang

動作モード

Tonyu2には「待機可能モード」と「待機不能モード」という2つの動作モードがあります.

待機可能モード

待機可能モードで動作している間は,updateなどの,途中で動作を中断する(つまり,プログラムの動作を待機状態にする)メソッド(これを「待機系メソッド」と呼びます)が呼ばれたときに,一旦処理を中断し,描画や入力状態の更新などの処理を行います.

あるメソッドが待機可能モードで動作する条件として,次のものがあります。

  • Actorクラスを継承したオブジェクトでは,mainメソッドは待機可能モードで動作します.
  • parallelメソッドで呼び出しを指定されたメソッドは待機可能モードで動作します.
  • onメソッドで指定されたイベントハンドラは、条件によっては待機可能モードで実行されます。詳細はonメソッドを参照してください。
  • 待機可能モードで動作している間に,次のいずれかの形式をもつ文から呼び出されるメソッドは,待機可能モードで動作します.ただし,メソッド名はそのオブジェクト自身がもつメソッドを指しており,それが待機不能メソッド(後述)でない場合に限ります.
    • メソッド名(引数...);
    • 戻り値=メソッド名(引数...);
    • var 戻り値=メソッド名(引数...);
    • super.メソッド名(引数...);
    • 戻り値=super.メソッド名(引数...);
    • return メソッド名(引数...);

待機不能モード

上で述べた条件にあてはまらない場合,「待機不能モード」で動作します. 待機不能モードでは,待機系メソッドが呼ばれても,途中で動作を中断しません.例えば,待機不能モード中にupdateメソッドが呼ばれても,待機動作を行いません.

待機不能メソッド

待機可能モードでは,待機不能モードより動作が遅くなることがあります.そこで,待機系メソッドが呼び出されないことが明らかな場合,必ず待機不能モードで動作したほうが効率がよくなります.このようなメソッドを「待機不能メソッド」と呼びます.

待機不能メソッドは,メソッドの定義の先頭にnowaitキーワードを追加して定義します.

nowait \myNoWaitMethod(arg1,arg2) {

}
  • 待機不能メソッド以外のメソッドを「待機可能メソッド」と呼びます。
  • 親クラスまたはモジュールとして含めているクラス内に同名の待機不能メソッドが存在する場合、nowaitがなくても待機不能メソッドになります。
  • 親クラスですでにフィールドとして定義されている場合も待機不能メソッドになります.

現在の動作が待機可能モードか待機不能モードかを判別する

待機可能モード時は_threadという変数に現在のスレッドが格納されています。待機不能モード時はこの値はnullです。

method1();        //待機可能モードで動作
a=method1();      //待機可能モードで動作
a=10+method1();   //待機不能モードで動作
other.method1();  //待機不能モードで動作
method2();        //待機不能モードで動作

\method1() {
   for (i=0 ; i<20 ; i++) {
      x++;
      if (_thread) { /*待機可能モード時はここが実行される*/ }
      else { /*待機不能モード時はここが実行される*/ }
      update(); // 待機可能モードなら,ここで待機する
   }
   return x;
}
nowait \method2() {
   for (i=0 ; i<20 ; i++) {
      x--;
      update(); // ここでは待機しない
   }
}

待機系メソッド一覧

Backlink

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.