Threadの割り込みがうまくいかないことがある
stageを連打してるとClickThreadのinterruptedが実行されないことがたまにある
一回目のクリックから3秒後にMainThreadからClickThreadにinterruptしてる
♥0 |
Line 64 |
Modified 2009-08-28 23:14:57 |
MIT License
archived:2017-03-10 08:11:54
ActionScript3 source code
/**
* Copyright ll_koba_ll ( http://wonderfl.net/user/ll_koba_ll )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/ulCl
*/
// stageを連打してるとClickThreadのinterruptedが実行されないことがたまにある
// 一回目のクリックから3秒後にMainThreadからClickThreadにinterruptしてる
package
{
import flash.display.*;
import org.libspark.thread.Thread;
import org.libspark.thread.EnterFrameThreadExecutor;
public class InterruptTest extends Sprite
{
public function InterruptTest()
{
Thread.initialize(new EnterFrameThreadExecutor())
new MainThread(this).start();
}
}
}
import flash.display.Sprite;
import flash.events.MouseEvent;
import org.libspark.thread.Thread;
class MainThread extends Thread
{
private var _clickThread:ClickThread;
private var _target:Sprite
public function MainThread(target:Sprite)
{
_target = target;
}
protected override function run():void
{
event(_target.stage, MouseEvent.CLICK, hoge);
}
private function hoge(e:MouseEvent):void
{
sleep(3000);
next(exit);
_clickThread = new ClickThread(_target);
_clickThread.start();
}
private function exit():void
{
_clickThread.interrupt();
trace("MainThread exit");
}
}
class ClickThread extends Thread
{
private var _target:Sprite;
public function ClickThread(target:Sprite)
{
_target = target;
}
protected override function run():void
{
event(_target.stage, MouseEvent.CLICK, click);
interrupted(exit);
}
private function click(e:MouseEvent):void
{
trace("click");
run();
}
private function exit():void
{
trace("exit!!!!!");
}
}