チェンジセット 523
- コミット日時:
- 2008/05/27 15:34:32 (6 ヶ月前)
- ファイル:
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
as3/Thread/branches/soumen/src/org/libspark/thread/Thread.as
r522 r523 204 204 public static function sleep(time:uint):void 205 205 { 206 206 // time が 0 だと永遠に待ってしまうので最低でも 1 にする 207 if (time == 0) { 208 time = 1; 209 } 210 211 // カレントスレッドを取得 212 var current:Thread = getCurrentThread(); 213 214 // sleep 用のモニタがなければ生成 215 if (current._sleepMonitor == null) { 216 current._sleepMonitor = new Monitor(); 217 } 218 219 // sleep 用のモニタを使って wait をかけて指定時間眠らせる 220 current._sleepMonitor.wait(time); 207 221 } 208 222 … … 224 238 _waitMonitor = null; 225 239 _joinMonitor = null; 240 _sleepMonitor = null; 226 241 _errorHandlers = null; 227 242 _error = null; … … 239 254 private var _waitMonitor:IMonitor; 240 255 private var _joinMonitor:IMonitor; 256 private var _sleepMonitor:IMonitor; 241 257 private var _errorHandlers:Dictionary; 242 258 private var _error:Object; … … 333 349 _state = _runningState; 334 350 351 // sleep によるタイムアウトではない場合 352 if (_waitMonitor != _sleepMonitor) { 353 // 次に実行する実行関数をタイムアウト用のものに切り替える 354 if (_timeoutHandler != null) { 355 _runHandler = _timeoutHandler; 356 } 357 } 358 335 359 // 保存されていたモニタを破棄 336 360 _waitMonitor = null; 337 338 // 次に実行する実行関数をタイムアウト用のものに切り替える339 if (_timeoutHandler != null) {340 _runHandler = _timeoutHandler;341 }342 361 } 343 362 as3/Thread/branches/soumen/tests/org/libspark/thread/AuxiliaryTest.as
r515 r523 67 67 t.start(); 68 68 } 69 70 /** 71 * 指定した時間以上 sleep できているかどうか。 72 */ 73 test function sleep():void 74 { 75 var s:SleepTestThread = new SleepTestThread(); 76 var t:TesterThread = new TesterThread(s); 77 78 t.addEventListener(Event.COMPLETE, async(function(e:Event):void 79 { 80 assertTrue(s.time >= 500); 81 }, 1000)); 82 83 t.start(); 84 } 69 85 } 70 86 } 71 87 72 88 import org.libspark.thread.Thread; 89 import flash.utils.getTimer; 73 90 74 91 class Static … … 140 157 } 141 158 } 159 160 class SleepTestThread extends Thread 161 { 162 public var time:uint = 0; 163 private var _t:uint; 164 165 override protected function run():void 166 { 167 _t = getTimer(); 168 169 sleep(500); 170 next(slept); 171 } 172 173 private function slept():void 174 { 175 time = getTimer() - _t; 176 } 177 }
