チェンジセット 641
- コミット日時:
- 2008/06/14 12:14:58 (5 ヶ月前)
- ファイル:
-
- as3/Thread/trunk (更新) (1 prop)
- as3/Thread/trunk/Thread-asdoc.bat (コピー) (as3/Thread/branches/soumen/Thread-asdoc.bat から コピー)
- as3/Thread/trunk/Thread.as3proj (コピー) (as3/Thread/branches/soumen/Thread.as3proj から コピー)
- as3/Thread/trunk/libs (コピー) (as3/Thread/branches/soumen/libs から コピー)
- as3/Thread/trunk/libs/as3unit-1.2-async.swc (コピー) (as3/Thread/branches/soumen/libs/as3unit-1.2-async.swc から コピー)
- as3/Thread/trunk/samples/00.hello (削除)
- as3/Thread/trunk/samples/99.misc (削除)
- as3/Thread/trunk/samples/autoShowHide (コピー) (as3/Thread/branches/soumen/samples/autoShowHide から コピー)
- as3/Thread/trunk/samples/autoShowHide/AutoShowHideThread.as (コピー) (as3/Thread/branches/soumen/samples/autoShowHide/AutoShowHideThread.as から コピー)
- as3/Thread/trunk/samples/autoShowHide/Sample.as (コピー) (as3/Thread/branches/soumen/samples/autoShowHide/Sample.as から コピー)
- as3/Thread/trunk/samples/frocessing (コピー) (as3/Thread/branches/soumen/samples/frocessing から コピー)
- as3/Thread/trunk/samples/frocessing/Lines3D.as (コピー) (as3/Thread/branches/soumen/samples/frocessing/Lines3D.as から コピー)
- as3/Thread/trunk/samples/frocessing/Lines3D.swf (コピー) (as3/Thread/branches/soumen/samples/frocessing/Lines3D.swf から コピー)
- as3/Thread/trunk/samples/hello (コピー) (as3/Thread/branches/soumen/samples/hello から コピー)
- as3/Thread/trunk/samples/hello/HelloThread.as (コピー) (as3/Thread/branches/soumen/samples/hello/HelloThread.as から コピー)
- as3/Thread/trunk/samples/hello/Sample.as (コピー) (as3/Thread/branches/soumen/samples/hello/Sample.as から コピー)
- as3/Thread/trunk/samples/hello/sample.fla (コピー) (as3/Thread/branches/soumen/samples/hello/sample.fla から コピー)
- as3/Thread/trunk/samples/hello/sample.swf (コピー) (as3/Thread/branches/soumen/samples/hello/sample.swf から コピー)
- as3/Thread/trunk/samples/loadImages (コピー) (as3/Thread/branches/soumen/samples/loadImages から コピー)
- as3/Thread/trunk/samples/loadImages/ImageSample.fla (コピー) (as3/Thread/branches/soumen/samples/loadImages/ImageSample.fla から コピー)
- as3/Thread/trunk/samples/loadImages/classes (コピー) (as3/Thread/branches/soumen/samples/loadImages/classes から コピー)
- as3/Thread/trunk/samples/loadImages/classes/ImageBase.as (コピー) (as3/Thread/branches/soumen/samples/loadImages/classes/ImageBase.as から コピー)
- as3/Thread/trunk/samples/loadImages/classes/ImageThread.as (コピー) (as3/Thread/branches/soumen/samples/loadImages/classes/ImageThread.as から コピー)
- as3/Thread/trunk/samples/loadImages/image (コピー) (as3/Thread/branches/soumen/samples/loadImages/image から コピー)
- as3/Thread/trunk/samples/loadImages/image/chinchilla.png (コピー) (as3/Thread/branches/soumen/samples/loadImages/image/chinchilla.png から コピー)
- as3/Thread/trunk/samples/loadImages/image/donkey.png (コピー) (as3/Thread/branches/soumen/samples/loadImages/image/donkey.png から コピー)
- as3/Thread/trunk/samples/loadImages/image/penguin.png (コピー) (as3/Thread/branches/soumen/samples/loadImages/image/penguin.png から コピー)
- as3/Thread/trunk/samples/loadImages/xml (コピー) (as3/Thread/branches/soumen/samples/loadImages/xml から コピー)
- as3/Thread/trunk/samples/loadImages/xml/image.xml (コピー) (as3/Thread/branches/soumen/samples/loadImages/xml/image.xml から コピー)
- as3/Thread/trunk/samples/progress (コピー) (as3/Thread/branches/soumen/samples/progress から コピー)
- as3/Thread/trunk/samples/progress/MainThread.as (コピー) (as3/Thread/branches/soumen/samples/progress/MainThread.as から コピー)
- as3/Thread/trunk/samples/progress/ProgressBarThread.as (コピー) (as3/Thread/branches/soumen/samples/progress/ProgressBarThread.as から コピー)
- as3/Thread/trunk/samples/progress/Sample.as (コピー) (as3/Thread/branches/soumen/samples/progress/Sample.as から コピー)
- as3/Thread/trunk/samples/progress/WorkerThread.as (コピー) (as3/Thread/branches/soumen/samples/progress/WorkerThread.as から コピー)
- as3/Thread/trunk/samples/progression (コピー) (as3/Thread/branches/soumen/samples/progression から コピー)
- as3/Thread/trunk/samples/progression/CommandThreadSample.as (コピー) (as3/Thread/branches/soumen/samples/progression/CommandThreadSample.as から コピー)
- as3/Thread/trunk/samples/progression/ThreadCommandSample.as (コピー) (as3/Thread/branches/soumen/samples/progression/ThreadCommandSample.as から コピー)
- as3/Thread/trunk/samples/tweenAndEvent1 (コピー) (as3/Thread/branches/soumen/samples/tweenAndEvent1 から コピー)
- as3/Thread/trunk/samples/tweenAndEvent1/EventSample.fla (コピー) (as3/Thread/branches/soumen/samples/tweenAndEvent1/EventSample.fla から コピー)
- as3/Thread/trunk/samples/tweenAndEvent1/classes (コピー) (as3/Thread/branches/soumen/samples/tweenAndEvent1/classes から コピー)
- as3/Thread/trunk/samples/tweenAndEvent1/classes/Base.as (コピー) (as3/Thread/branches/soumen/samples/tweenAndEvent1/classes/Base.as から コピー)
- as3/Thread/trunk/samples/tweenAndEvent1/classes/MainThread.as (コピー) (as3/Thread/branches/soumen/samples/tweenAndEvent1/classes/MainThread.as から コピー)
- as3/Thread/trunk/samples/tweenAndEvent1/classes/PandaThread.as (コピー) (as3/Thread/branches/soumen/samples/tweenAndEvent1/classes/PandaThread.as から コピー)
- as3/Thread/trunk/samples/tweenAndEvent2 (コピー) (as3/Thread/branches/soumen/samples/tweenAndEvent2 から コピー)
- as3/Thread/trunk/samples/tweenAndEvent2/EventSample.fla (コピー) (as3/Thread/branches/soumen/samples/tweenAndEvent2/EventSample.fla から コピー)
- as3/Thread/trunk/samples/tweenAndEvent2/classes (コピー) (as3/Thread/branches/soumen/samples/tweenAndEvent2/classes から コピー)
- as3/Thread/trunk/samples/tweenAndEvent2/classes/Base.as (コピー) (as3/Thread/branches/soumen/samples/tweenAndEvent2/classes/Base.as から コピー)
- as3/Thread/trunk/samples/tweenAndEvent2/classes/MainThread.as (コピー) (as3/Thread/branches/soumen/samples/tweenAndEvent2/classes/MainThread.as から コピー)
- as3/Thread/trunk/samples/tweenAndEvent2/classes/PandaThread.as (コピー) (as3/Thread/branches/soumen/samples/tweenAndEvent2/classes/PandaThread.as から コピー)
- as3/Thread/trunk/samples/tweener (コピー) (as3/Thread/branches/soumen/samples/tweener から コピー)
- as3/Thread/trunk/samples/tweener/MainThread.as (コピー) (as3/Thread/branches/soumen/samples/tweener/MainThread.as から コピー)
- as3/Thread/trunk/samples/tweener/MainThread2.as (コピー) (as3/Thread/branches/soumen/samples/tweener/MainThread2.as から コピー)
- as3/Thread/trunk/samples/tweener/Sample.as (コピー) (as3/Thread/branches/soumen/samples/tweener/Sample.as から コピー)
- as3/Thread/trunk/samples/tweener/Sample2.as (コピー) (as3/Thread/branches/soumen/samples/tweener/Sample2.as から コピー)
- as3/Thread/trunk/samples/urlloader/MainThread.as (更新) (6 diffs)
- as3/Thread/trunk/samples/urlloader/MainThreadWithProgress.as (コピー) (as3/Thread/branches/soumen/samples/urlloader/MainThreadWithProgress.as から コピー)
- as3/Thread/trunk/samples/urlloader/ProgressTraceThread.as (コピー) (as3/Thread/branches/soumen/samples/urlloader/ProgressTraceThread.as から コピー)
- as3/Thread/trunk/samples/urlloader/Sample.as (更新) (2 diffs)
- as3/Thread/trunk/samples/urlloader/SampleWithProgress.as (コピー) (as3/Thread/branches/soumen/samples/urlloader/SampleWithProgress.as から コピー)
- as3/Thread/trunk/src/org/libspark/display (削除)
- as3/Thread/trunk/src/org/libspark/net (削除)
- as3/Thread/trunk/src/org/libspark/thread/Debug.as (削除)
- as3/Thread/trunk/src/org/libspark/thread/EnterFrameThreadExecutor.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/EnterFrameThreadExecutor.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/IMonitor.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/IMonitor.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/IThreadExecutor.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/IThreadExecutor.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/IntervalThreadExecutor.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/IntervalThreadExecutor.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/MasterThread.as (削除)
- as3/Thread/trunk/src/org/libspark/thread/Monitor.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/Monitor.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/MonitorObject.as (削除)
- as3/Thread/trunk/src/org/libspark/thread/Thread.as (更新) (2 diffs)
- as3/Thread/trunk/src/org/libspark/thread/ThreadState.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/ThreadState.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/debugClasses (削除)
- as3/Thread/trunk/src/org/libspark/thread/errors/CurrentThreadNotFoundError.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/errors/CurrentThreadNotFoundError.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/errors/IllegalThreadStateError.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/errors/IllegalThreadStateError.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/errors/InterruptError.as (削除)
- as3/Thread/trunk/src/org/libspark/thread/errors/InterruptedError.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/errors/InterruptedError.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/errors/ThreadErrorHandler.as (削除)
- as3/Thread/trunk/src/org/libspark/thread/errors/ThreadLibraryNotInitializedError.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/errors/ThreadLibraryNotInitializedError.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/display (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/display から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/display/LoaderThread.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/display/LoaderThread.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/frocessing (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/frocessing から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/frocessing/Frocessing2DThread.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/frocessing/Frocessing2DThread.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/frocessing/Frocessing3DThread.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/frocessing/Frocessing3DThread.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/media (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/media から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/media/SoundLoaderThread.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/media/SoundLoaderThread.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/net (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/net から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/net/URLLoaderThread.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/net/URLLoaderThread.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/progression (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/progression から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/progression/CommandThread.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/progression/CommandThread.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/progression/ThreadCommand.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/progression/ThreadCommand.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/tweener (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/tweener から コピー)
- as3/Thread/trunk/src/org/libspark/thread/threads/tweener/TweenerThread.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/threads/tweener/TweenerThread.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/utils (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/utils から コピー)
- as3/Thread/trunk/src/org/libspark/thread/utils/EventDispatcherThread.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/utils/EventDispatcherThread.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/utils/Executor.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/utils/Executor.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/utils/IProgress.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/utils/IProgress.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/utils/IProgressNotifier.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/utils/IProgressNotifier.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/utils/MultiProgress.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/utils/MultiProgress.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/utils/ParallelExecutor.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/utils/ParallelExecutor.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/utils/Progress.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/utils/Progress.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/utils/SerialExecutor.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/utils/SerialExecutor.as から コピー)
- as3/Thread/trunk/src/org/libspark/thread/utils/events (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/utils/events から コピー)
- as3/Thread/trunk/src/org/libspark/thread/utils/events/ProgressEvent.as (コピー) (as3/Thread/branches/soumen/src/org/libspark/thread/utils/events/ProgressEvent.as から コピー)
- as3/Thread/trunk/src/org/libspark/tweener (削除)
- as3/Thread/trunk/src/org/libspark/utils (削除)
- as3/Thread/trunk/tests (コピー) (as3/Thread/branches/soumen/tests から コピー)
- as3/Thread/trunk/tests/AllTests.as (コピー) (as3/Thread/branches/soumen/tests/AllTests.as から コピー)
- as3/Thread/trunk/tests/RunTests.as (コピー) (as3/Thread/branches/soumen/tests/RunTests.as から コピー)
- as3/Thread/trunk/tests/org (コピー) (as3/Thread/branches/soumen/tests/org から コピー)
- as3/Thread/trunk/tests/org/libspark (コピー) (as3/Thread/branches/soumen/tests/org/libspark から コピー)
- as3/Thread/trunk/tests/org/libspark/thread (コピー) (as3/Thread/branches/soumen/tests/org/libspark/thread から コピー)
- as3/Thread/trunk/tests/org/libspark/thread/AuxiliaryTest.as (コピー) (as3/Thread/branches/soumen/tests/org/libspark/thread/AuxiliaryTest.as から コピー)
- as3/Thread/trunk/tests/org/libspark/thread/EventTest.as (コピー) (as3/Thread/branches/soumen/tests/org/libspark/thread/EventTest.as から コピー)
- as3/Thread/trunk/tests/org/libspark/thread/ExceptionTest.as (コピー) (as3/Thread/branches/soumen/tests/org/libspark/thread/ExceptionTest.as から コピー)
- as3/Thread/trunk/tests/org/libspark/thread/InterruptionTest.as (コピー) (as3/Thread/branches/soumen/tests/org/libspark/thread/InterruptionTest.as から コピー)
- as3/Thread/trunk/tests/org/libspark/thread/MonitorTest.as (コピー) (as3/Thread/branches/soumen/tests/org/libspark/thread/MonitorTest.as から コピー)
- as3/Thread/trunk/tests/org/libspark/thread/TesterThread.as (コピー) (as3/Thread/branches/soumen/tests/org/libspark/thread/TesterThread.as から コピー)
- as3/Thread/trunk/tests/org/libspark/thread/TesterThreadTest.as (コピー) (as3/Thread/branches/soumen/tests/org/libspark/thread/TesterThreadTest.as から コピー)
- as3/Thread/trunk/tests/org/libspark/thread/ThreadAllTests.as (コピー) (as3/Thread/branches/soumen/tests/org/libspark/thread/ThreadAllTests.as から コピー)
- as3/Thread/trunk/tests/org/libspark/thread/ThreadExecutionTest.as (コピー) (as3/Thread/branches/soumen/tests/org/libspark/thread/ThreadExecutionTest.as から コピー)
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
as3/Thread/trunk
- 属性の設定値: svn:ignore (登録)
obj
bin
- 属性の設定値: svn:ignore (登録)
as3/Thread/trunk/samples/urlloader/MainThread.as
r150 r641 1 package1 package 2 2 { 3 import flash.events.Event; 3 4 import org.libspark.thread.Thread; 4 5 import org.libspark.utils.concurrent.Executor; 6 import org.libspark.utils.concurrent.SerialExecutor; 7 8 import org.libspark.net.URLLoaderThread; 5 import org.libspark.thread.utils.Executor; 6 import org.libspark.thread.utils.ParallelExecutor; 7 import org.libspark.thread.threads.net.URLLoaderThread; 9 8 10 9 import flash.net.URLRequest; … … 14 13 15 14 /** 16 * このスレッドは、URLLoaderThread とSerialExecutorを用いて、平行して三つのURLからデータをダウンロードします15 * このスレッドは、URLLoaderThread と ParallelExecutor を用いて、平行して三つの URL からデータをダウンロードします 17 16 */ 18 17 public class MainThread extends Thread … … 21 20 22 21 /** 23 * initializeメソッドには初期化処理を記述します22 * スレッドの処理は run メソッドをオーバーライドして記述します 24 23 */ 25 protected override function initialize():void24 override protected function run():void 26 25 { 27 // 並列してスレッドを実行するための SerialExecutorを作成します28 _loaders = new SerialExecutor();26 // 並列してスレッドを実行するための ParallelExecutor を作成します 27 _loaders = new ParallelExecutor(); 29 28 30 29 // これに、三つのURLLoaderThreadを追加します … … 32 31 _loaders.addThread(new URLLoaderThread(new URLRequest('http://www.yahoo.co.jp/'))); 33 32 _loaders.addThread(new URLLoaderThread(new URLRequest('http://www.adobe.com/jp/'))); 33 34 trace('begin loading.'); 35 36 // ロード処理を開始 (= SerialExecutor スレッドを開始) します 37 _loaders.start(); 38 // スレッドが終了 (= ロードが完了) するまで、次のメソッドが実行されないように待ちます 39 _loaders.join(); 40 41 // 次に実行されるメソッドをセットしておきます 42 next(executeComplete); 43 // 例外ハンドラを設定しておきます 44 error(IOError, errorHandler); 45 error(SecurityError, errorHandler); 34 46 } 35 47 36 48 /** 37 * exeucteメソッドにはスレッドの処理を記述します 38 */ 39 protected override function execute():void 40 { 41 // 次に実行されるメソッドをセットしておきます 42 switchExecuteMethod(executeComplete); 43 44 trace('begin loading.'); 45 46 // ロード処理を開始(=SerialExecutorスレッドを開始)します 47 _loaders.begin(); 48 // スレッドが終了(=ロードが完了)するまで、次のメソッドが実行されないように待ちます 49 _loaders.join(); 50 } 51 52 /** 53 * executeCompleteメソッドには、ロード完了後の処理を書く事にします 49 * executeComplete メソッドには、ロード完了後の処理を書く事にします 54 50 */ 55 51 private function executeComplete():void … … 64 60 } 65 61 66 // 終了67 terminate();62 // next を設定しなければスレッドは終了します 63 // 終了の前には finalize が呼び出されます 68 64 } 69 65 70 66 /** 71 * finalizeメソッドには終了処理を書きます67 * スレッドの終了処理は finalize メソッドをオーバーライドして記述します 72 68 */ 73 69 protected override function finalize():void … … 79 75 80 76 /** 81 * catchErrorメソッドには、例外処理を書きます 82 * 子スレッド(=_loaders)で発生した例外もここにきます 77 * 例外ハンドラ 83 78 * 84 * @param thread 例外が発生したスレッド85 * @param e 発生した例外79 * @param e 発生した例外 80 * @param thread 発生元のスレッド 86 81 */ 87 pr otected override function catchError(thread:Thread, e:Error):void82 private function errorHandler(e:IOError, t:Thread):void 88 83 { 89 try { 90 throw e; 91 } 92 catch (ioError:IOError) { 93 // IOErrorなので例外を出力して終了 94 trace(ioError.message); 95 terminate(); 96 return; 97 } 98 catch (securityError:SecurityError) { 99 // SecurityErrorなので例外を出力して終了 100 trace(securityError.message); 101 terminate(); 102 return; 103 } 84 trace('error!!'); 104 85 105 // それ以外の例外はこのスレッドの管轄外なので上位スレッドに投げる 106 throw e; 107 } 108 109 public override function toString():String 110 { 111 return '[Main]'; 86 // 例外を出力して終了 87 trace(e.getStackTrace()); 88 // 例外ハンドラから終了するには、明示的に next(null) を呼び出します 89 next(null); 112 90 } 113 91 } as3/Thread/trunk/samples/urlloader/Sample.as
r150 r641 1 package1 package 2 2 { 3 import flash.display.Sprite;4 import flash.events.Event; 5 6 import org.libspark.thread.MasterThread;7 3 import flash.display.Sprite; 4 5 import org.libspark.thread.Thread; 6 import org.libspark.thread.EnterFrameThreadExecutor; 7 8 8 /** 9 * このサンプルでは URLLoaderThreadの使用方法などを学びます9 * このサンプルでは URLLoaderThread の使用方法などを学びます 10 10 * 11 * 詳細は MainThreadを見てください11 * 詳細は MainThread を見てください 12 12 */ 13 13 public class Sample extends Sprite … … 15 15 public function Sample() 16 16 { 17 // スレッドを実行するためのMasterThreadを作成します 18 // 引数には一番最初に実行するスレッド(メインスレッド)を渡します。ここではMainThread 19 _master = new MasterThread(new MainThread()); 20 21 addEventListener(Event.ENTER_FRAME, enterFrameHandler); 22 } 23 24 private var _master:MasterThread; 25 26 private function enterFrameHandler(event:Event):void 27 { 28 // MasterThreadのexecuteActiveThreadsメソッドを呼び出すことで、スレッドが実行されます 29 // 通常、EnterFrameのタイミングで呼び出すことになるでしょう 30 _master.executeActiveThreads(); 17 // スレッドを実行するには、まずはじめに Thread#initialize をコールし、スレッドライブラリを初期化します 18 // Thread#initialize には、IThreadExecutor のインスタンスを渡します 19 // ここでは EnterFrameExecutor を渡し、毎フレームスレッドが実行されるようにします 20 Thread.initialize(new EnterFrameThreadExecutor()); 21 22 // MainThread を起動します 23 var main:MainThread = new MainThread(); 24 main.start(); 31 25 } 32 26 } as3/Thread/trunk/src/org/libspark/thread/Thread.as
r175 r641 1 /* 2 * ActionScript Thread Library 3 * 4 * Licensed under the MIT License 5 * 6 * Copyright (c) 2008 BeInteractive! (www.be-interactive.org) and 7 * Spark project (www.libspark.org) 8 * 9 * Permission is hereby granted, free of charge, to any person obtaining a copy 10 * of this software and associated documentation files (the "Software"), to deal 11 * in the Software without restriction, including without limitation the rights 12 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 * copies of the Software, and to permit persons to whom the Software is 14 * furnished to do so, subject to the following conditions: 15 * 16 * The above copyright notice and this permission notice shall be included in 17 * all copies or substantial portions of the Software. 18 * 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 * THE SOFTWARE. 26 * 27 */ 1 28 package org.libspark.thread 2 29 { 3 import org.libspark.thread.errors.ThreadErrorHandler; 4 5 public class Thread extends MonitorObject 30 import flash.events.Event; 31 import flash.events.IEventDispatcher; 32 import flash.utils.Dictionary; 33 import flash.utils.getQualifiedClassName; 34 import flash.utils.getQualifiedSuperclassName; 35 import flash.utils.getDefinitionByName; 36 import org.libspark.thread.errors.CurrentThreadNotFoundError; 37 import org.libspark.thread.errors.IllegalThreadStateError; 38 import org.libspark.thread.errors.InterruptedError; 39 import org.libspark.thread.errors.ThreadLibraryNotInitializedError; 40 41 /** 42 * Thread クラスは ActionScript Thread Library 1.0 (そうめん) の核となるクラスで、擬似スレッドを実現します. 43 * 44 * <p>ここで実現される擬似スレッドは、タスクシステムと Java のスレッドモデルをベースとしています。 45 * 処理をいくつかのメソッドに切り分け、呼び出すメソッド (「<em>実行関数</em>」と呼びます) を切り替えつつ 46 * 順々に実行していくことで、処理を進めます。</p> 47 * 48 * <p>新しいスレッドを作成するためには、まず Thread クラスのサブクラスを作成します。 49 * このサブクラスは、 Thread クラスの run メソッドをオーバーライドする必要があります。 50 * たとえば、「Hello, Thread!!」と出力するスレッドは、次のようになります。</p> 51 * <listing>public class HelloThread extends Thread 52 * { 53 * override protected function run():void 54 * { 55 * trace('Hello, Thread!!'); 56 * } 57 * }</listing> 58 * 59 * <p>作成したスレッドを実行するためには、 Thread Library を初期化する必要があります。 60 * 次のように、 Thread クラスの静的メソッド initialize を呼び出すことで初期化を行います。 61 * このとき、引数に IThreadExecutor インターフェイスの実装クラスのインスタンスを指定します。 62 * この IThreadExecutor インスタンスは、「いつスレッドを実行するか」を決める重要な役割を担っています。 63 * ここでは、 EnterFrameThreadExecutor クラスのインスタンスを渡し、フレーム実行のタイミングで 64 * スレッドが実行されるようにしています。初期化処理は、アプリケーションの最初で一度だけ行えば、その後呼び出す必要はありません。</p> 65 * <listing>Thread.initialize(new EnterFrameThreadExecutor());</listing> 66 * 67 * <p>最後に、次のように HelloThread クラスのインスタンスを作り、 start メソッドを呼び出すことで、 68 * スレッドの実行を開始します。</p> 69 * <listing>var t:Thread = new HelloThread(); 70 * t.start();</listing> 71 * 72 * <p>スレッドは親子関係を形成します。この親子関係は、スレッドの実行開始時に決定されます。 73 * スレッドの start を呼び出したスレッド (つまりカレントスレッド) は、親スレッドとなり、 74 * start が呼び出されたスレッドは、その親スレッドの子スレッドとなります。 75 * ただし、 start の呼び出しがスレッドの外 (つまりカレントスレッドが null のとき) に行われた場合、 76 * start が呼び出されたスレッドはトップレベルスレッドとなります。</p> 77 * 78 * <p>スレッドの親子関係は、スレッドの実行順序と例外の伝播において重要になります。 79 * スレッドの実行は、一番最初に開始されたトップレベルスレッドから始まります。今、このスレッドを A と呼ぶことにします。 80 * A に子スレッドがいる場合、 A の実行よりも先にまず、子スレッドが、開始された順番で実行されます。 81 * この子スレッドが実行されるとき、その子スレッドにさらに子スレッド (Aから見て孫スレッド) がいる場合、 82 * その子スレッドの実行より先に孫スレッドが開始された順番で実行され、これが子スレッドがいなくなるまで続けられます。 83 * 全ての A の子スレッドの実行が終了すると、 A が実行され、次に、A の次に開始されたトップレベルスレッドの実行が 84 * 同様にして続きます。</p> 85 * 86 * <p>スレッド内で例外が発生し、その例外が、例外が発生したスレッド内で捕捉されなかった場合、 87 * 例外は親スレッドに伝播します。例外が発生したのがトップレベルスレッドで、親スレッドがいない場合、 88 * 例外は uncaughtErrorHandler に渡されます。</p> 89 * 90 * <p>子スレッドよりも先に親スレッドが終了した場合、その親スレッドの全ての子スレッドは孤児スレッドとなり、 91 * トップレベルスレッドとして再配置されます。</p> 92 * 93 * <p>スレッドはある時点で、以下のいずれかの状態を取ります。これらの値は ThreadState クラスで定義されており、 94 * state プロパティを通して知ることができます。</p> 95 * <ul> 96 * <li>NEW</li> 97 * <li>RUNNABLE</li> 98 * <li>WAITING</li> 99 * <li>TIMED_WAITING</li> 100 * <li>TERMINATING</li> 101 * <li>TERMINATED</li> 102 * </ul> 103 * 104 * <p>スレッドが生成されると、まずはじめに状態は「NEW」に設定されます。この後、 start メソッドによって 105 * スレッドが開始されると、状態は「RUNNABLE」に設定されます。「NEW」以外の状態のスレッドを start メソッドによって 106 * 開始することはできません。</p> 107 * 108 * <p>wait メソッド、 join メソッド等の呼び出しによってスレッドが待機状態になる場合、状態は「WAITING」に 109 * 設定されます。このとき、タイムアウトが設定されるか、sleep メソッドの呼び出しである場合、状態は「TIMED_WAITING」に 110 * 設定されます。待機状態が解除されると状態は元に戻ります。</p> 111 * 112 * <p>スレッドが終了フェーズに移行すると、状態は「TERMINATING」に設定されます。スレッドが終了フェーズから 113 * 実行フェーズに戻ることは無く、同様に状態が「TERMINATING」から「RUNNABLE」に戻ることもありません。 114 * 終了フェーズが終わり、完全にスレッドが終了すると、状態は「TERMINATED」に設定されます。</p> 115 * 116 * <p>スレッドの動作を視覚的に知りたい場合、以下の動作チャートを見ることをお勧めします。</p> 117 * <ul> 118 * <li>http://www.libspark.org/htdocs/as3/thread-files/behavior-chart.png</li> 119 * </ul> 120 * 121 * @author yossy:beinteractive 122 * @see #run() 123 * @see #initialize() 124 * @see #start() 125 * @see #uncaughtErrorHandler() 126 * @see #state 127 * @see ThreadState 128 * @see http://www.libspark.org/htdocs/as3/thread-files/behavior-chart.png 129 */ 130 public class Thread extends Monitor 6 131 { 7 private static const STATE_STANDINGBY:uint = 0; 8 private static const STATE_RUNNING:uint = 1 << 0; 9 private static const STATE_SLEEPING:uint = 1 << 1; 10 private static const STATE_SUSPENDING:uint = 1 << 2; 11 private static const STATE_TERMINATED:uint = 1 << 3; 12 private static const STATE_ERROR:uint = 1 << 4; 13 132 private static var _executor:IThreadExecutor; 133 private static var _threadIndex:uint = 0; 14 134 private static var _currentThread:Thread = null; 15 internal static var _debug:Debug = null; 16 135 private static var _toplevelThreads:Array = []; 136 private static var _uncaughtErrorHandler:Function = null; 137 138 /** 139 * スレッドライブラリを初期化します. 140 * 141 * <p>このメソッドは、最初に一度だけ呼び出してください。</p> 142 * 143 * <p>スレッドの実行は、指定された IThreadExecutor インスタンスによって行われます。 144 * (このメソッド内で、 IThreadExectuor#start が呼び出されます)</p> 145 * 146 * @param executor スレッドの実行を行う IThreadExecutor 147 * @see IThreadExecutor 148 */ 149 public static function initialize(executor:IThreadExecutor):void 150 { 151 _threadIndex = 0; 152 _currentThread = null; 153 _toplevelThreads.length = 0; 154 155 // 古い IThreadExecutor の実行を止める 156 if (_executor != null) { 157 _executor.stop(); 158 } 159 160 _executor = executor; 161 162 // 新しい IThreadExecutor の実行を開始 163 if (_executor != null) { 164 _executor.start(); 165 } 166 } 167 168 /** 169 * initialize メソッドの呼び出しによって IThreadExecutor が設定され、スレッドが実行可能な状態であれば true、そうでなければ false を返します. 170 * 171 * @see #initialize() 172 */ 173 public static function get isReady():Boolean 174 { 175 return _executor != null; 176 } 177 178 /** 179 * 現在実行中のスレッドを返します. 180 * 181 * <p>現在実行中のスレッドがない場合、 null を返します。</p> 182 */ 17 183 public static function get currentThread():Thread 18 184 { … … 20 186 } 21 187 188 /** 189 * 現在実行中のスレッドを返します. 190 * 191 * <p>ただし、現在実行中のスレッドがない(currentThread が null)の場合は CurrentThreadNotFoundError をスローします。</p> 192 * 193 * @return 現在実行中のスレッド 194 * @throws org.libspark.thread.errors.CurrentThreadNotFoundError 現在実行中のスレッドがない場合 195 * @private 196 */ 197 internal static