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

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 あると便利だなあという思いは捨てきれない、お茶目で巨根な俺なのである。

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

トラックバック(0)

このブログ記事を参照しているブログ一覧: シーケンシャルに処理しようとすると、Adobe AS3 はなかなかきついな

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/1454

コメントする

このブログ記事について

このページは、shinodaが2011年1月24日 17:56に書いたブログ記事です。

ひとつ前のブログ記事は「久しぶりに後輩とクダコで一杯やったのである」です。

次のブログ記事は「外部画像ファイルを表示するだけで一苦労であった」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら