チェンジセット 3324

差分発生行の前後
無視リスト:
コミット日時:
2010/01/22 12:18:29 (2 年前)
コミッタ:
yamaharu
ログメッセージ:

割り込みハンドラの実行に失敗する事がある問題に対応したThread
詳細はhttp://www.imajuk.com/blog/archives/2010/01/thread1.htmlを見てください。

ファイル:

凡例:

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

    r2106 r3324  
    136136                private static var _uncaughtErrorHandler:Function = null; 
    137137                private static var _defaultErrorHandlers:Dictionary = null; 
     138                private static var _reserveInterrupt : Array = []; 
    138139                 
    139140                /** 
     
    350351                                } 
    351352                        } 
     353                         
     354                        //予約された割り込みハンドラがあれば実行する 
     355                    _reserveInterrupt.forEach( 
     356                        function(thread:Thread, ...param):void 
     357                        { 
     358                            thread.internalInterrupt(); 
     359                        } 
     360                    ); 
     361                    _reserveInterrupt = []; 
    352362                } 
    353363                 
     
    791801                public function interrupt():void 
    792802                { 
     803                        //割り込みを予約し、次のサイクルの最後に実行する 
     804                    _reserveInterrupt.push(this); 
     805                } 
     806                 
     807                internal function internalInterrupt():void 
     808                { 
    793809                        if (_state == ThreadState.WAITING || _state == ThreadState.TIMED_WAITING) { 
    794810                                // 待機中の場合 
     
    10261042                private function eventHandler(e:Event, handler:EventHandler):void 
    10271043                { 
     1044                        //実行関数が割り込みハンドラならイベントハンドラをリセットして何もしない 
     1045                    if (_interruptedHandler != null && _runHandler == _interruptedHandler)  
     1046                    { 
     1047                        // イベントハンドラをリセット 
     1048                        resetEventHandlers(); 
     1049                        return; 
     1050                    } 
     1051                     
    10281052                        // 既にイベントが起こっていれば何もしない 
    10291053                        if (_event != null) { 
  • as3/Thread/branches/imajuk/tests/org/libspark

    • 属性の設定値: svn:ignore (登録)
      as3unit

      asunit
  • as3/Thread/branches/imajuk/tests/org/libspark/thread/ThreadAllTests.as

    r641 r3324  
    1313                        ExceptionTest, 
    1414                        EventTest, 
    15                         InterruptionTest 
     15                        InterruptionTest, 
     16                        InterruptHandlerTest 
    1617                ]; 
    1718        }