電気ウナギ的○○

About Home

シーケンシャルに処理しようとすると、Adobe AS3 はなかなかきついな

shinoda (2011年1月24日 17:56)

WebService と通信しながら、シーケンシャルに処理したい案件があったので、

1.プロセス順(ProcIdx)に 0 をセットして、最初の WebService との通信用イベントを実行し、ProcIdx の値が更新されるまで無限ループで待つ。
(例)
ProcIdxOld  = ProcIdx;
while(ProcIdx <= ProcIdxOld) {
    // dummy
}

2.WebService との通信用イベントが終了(ResultEvent.RESULT 等)したら、ProcIdx の値を 1加算。

3.上記 2の処理で ProcIdx の値が加算されたので、1 の処理の while ループから抜けて次の処理へ・・・

という動きでシーケンシャルな処理を実現しようと思ったのだが・・・

駄目だった(^^;

どうも、1の while ループ処理が CPU を掴みっぱなしになってしまうようで、終了イベント(上記 2の処理ね)がまったく実行されないようだ。

ここで、VisualBasic なら sleep 命令を while ループの中に書いて終わりなのだが、Adobe ActionScript には sleep 命令はない。

つーことで、結局、Timer イベントを 500ミリ秒とかの単位で発生させ、

1.Timer イベントで、現在どこまで処理が進んでいるかチェック(プロセス番号(ProcIdx)や、そのプロセスが終了したかのフラグ(ProxEndFlg)を持ち、その値をチェックする)。前の処理が終わったら、次の処理をおこなう(WebService との通信用イベントを実行)。その際、ProcIdx を 1加算。

2.WebServer との通信用イベントが終了(ResultEvent.RESULT 等)したら、ProcEndFlg に 1(終了の意味)をセット。

3.Timer イベントで、現在どこまで処理が進んでいるかチェック。前の処理が終わったら、次の処理をおこなう(WebService との通信用イベントを実行)。その際、ProcIdx を 1加算。

・・・これが、全ての WebService との通信処理が終わるまで延々続く・・・

というプログラムを書かなきゃ駄目。
Timer イベント内で、処理がどこまで進んでいるかチェックする分だけプログラムは複雑になる。

まあ、sleep が無いのはイベント駆動型プログラミングとしては正当なのかもしれないが、やっぱ sleep あると便利だなあという思いは捨てきれない、お茶目で巨根な俺なのである。

ああ・・・面倒くせえ。(^^;

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/1454

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE