チェンジセット 636

差分発生行の前後
無視リスト:
コミット日時:
2008/06/14 11:08:12 (5 ヶ月前)
コミッタ:
yossy
ログメッセージ:

Thread(soumen): SerialExecutor? の割り込み処理をもう少し賢く

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as3/Thread/branches/soumen/src/org/libspark/thread/utils/SerialExecutor.as

    r535 r636  
    3131 
    3232        /** 
    33          * SerialExecutor は複数のスレッドを順番に実行するためのユーティリティクラスです 
     33         * SerialExecutor は複数のスレッドを順番に実行するためのユーティリティクラスです. 
    3434         *  
    35          * 開始したスレッドの終了を待って次のスレッドを実行し、全てのスレッドの実行が終了するとこのスレッドも終了します 
     35         * <p>開始したスレッドの終了を待って次のスレッドを実行し、全てのスレッドの実行が終了するとこのスレッドも終了します。</p> 
     36         *  
     37         * <p>このスレッドに対して割り込みがかけられた場合、その時点で実行されているスレッドに対して同じように割り込みを掛けた上で 
     38         * そのスレッドの終了を待ち、それ以降のスレッドの実行をキャンセルします。</p> 
     39         *  
     40         * <p>実行中のスレッドで例外が発生した場合、このスレッドは特に何もせず、例外を親に伝播させます。</p> 
    3641         *  
    3742         * @author      yossy:beinteractive 
     
    4146                private var _index:uint; 
    4247                private var _current:Thread; 
     48                private var _isInterrupted:Boolean = false; 
    4349                 
    4450                /** 
     
    5460                                _current.interrupt(); 
    5561                        } 
     62                         
     63                        // 割り込まれた 
     64                        _isInterrupted = true; 
    5665                } 
    5766                 
    5867                /** 
    59                  * 実行 
     68                 * @private 
    6069                 */ 
    6170                override protected function run():void 
     
    7079                 
    7180                /** 
    72                  * スレッド実行 
     81                 * @private 
    7382                 */ 
    7483                private function runThread():void 
     
    8493                        // もう実行するスレッドがない場合終了する 
    8594                        if (_threads.length <= _index) { 
     95                                return; 
     96                        } 
     97                        // もしくは割り込まれた場合は終了する 
     98                        if (_isInterrupted) { 
    8699                                return; 
    87100                        }