トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     前処理を待ってから次処理を行いたい場合
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
Åê¹ÆNo.4985
投稿日時: 2004-3-15 19:33
前処理を待ってから次処理を行いたい場合
こんにちは。お世話になっております。
今回は、FlashRemoting/AS1.0/Player6.0以上です。

Flashの特性なのかもしれませんが、ある1処理が遅い場合に、次の処理が先に走ってしまう事があります。
皆さんはどのように回避していますでしょうか?
よろしければ参考にお聞かせ願えないでしょうか。

例えば次のような時・・・

引用:

#include "NetServices.as"
#include "DataGlue.as"

/* ゲートウェイ・コネクション・サービスを設定 */
NetServices.setDefaultGatewayURL("http://hoge:0123/sample");
var conn = NetServices.createGatewayConnection();
var service = conn.getService("aaa.bbb.HogeClass", this);


service.getData();

function getData_Result(ret){
/* 取得したデータの格納処理とか */
for(i=0;i<ret.size;i++){
_global.sample[i] = ret;
}

funcHoge();

}

function getData_Status(ret){
/* エラー処理とか */
}


function funcHoge(){
/* _global.sampleを使用してツリー作成処理とか */
}


getDataで取得してきたデータが多量で処理に少し時間がかかると
先にfuncHoge()を処理してしまい、データが空のツリーが作成されたりします。

現在は、ツリー再表示ボタンなるものを配置して、表示されなかった場合はこのボタンを押してもらうという仕様(ルール)で回避しています。

しかし、根本的な解決ではない気がします。
どなたか他に良い方法を知っている方がいましたら、せひご教授ください。
ゲスト
Åê¹ÆNo.5255
投稿日時: 2004-3-19 18:19
Re: 前処理を待ってから次処理を行いたい場合
こんにちは。

Flashでは、読み込みメソッドのあるビルドインクラスにはonLoadのようなイベントハンドラがありますので、そこに関数を割り当てます。
FlashRemotingには見あたりませんか?
ゲスト
Åê¹ÆNo.5261
投稿日時: 2004-3-19 19:10
Re: 前処理を待ってから次処理を行いたい場合
マツダ様、こんにちは。
ご返答ありがとうございます。

なるほど、onLoadでハンドリングできれば良いですね

今回の場合、FlashRemotingに特化した問題ではなく
純粋にFLASHの処理に関しての疑問でした。

Remotingを使用しないで、例えばデータ取得先はファイルでも良いです。

取得したデータが莫大だった場合に処理が多少遅くなりますよね?
FLASHはストリーミングで動作しているからなのか
ある1処理に時間がかかった場合、次の処理を先に走らせてしまうみたいです。

マツダさんが仰られているいるように、onLoad等のハンドラを使用できれば良いのですが、単純なfor文等で処理に時間がかかってしまうと、ハンドリング出来ない状態になってしまいます。
私の知識不足もあるのでしょうが

それとも私のコーディング自体が悪かったのでしょうか。
現在も引き続き調査しているところです。

また何かわかりましたら教えていただけると嬉しいです。
ありがとうございました!

コマツ
Åê¹ÆNo.5264
投稿日時: 2004-3-19 19:32
職人
居住地: 東京都葛飾区
投稿: 356
使用環境:
windows7
CS5.5 CS6
Re: 前処理を待ってから次処理を行いたい場合
こんにちは。

思いつきなのですが、

function getData_Result(ret){
/* 取得したデータの格納処理とか */
 for(i=0;i<ret.size;i++){
  _global.sample[i] = ret;
  if(i>ret.size-1){
   funcHoge();
   break;
  }
 }
}


みたいにして、最後のfor文の処理が終了してから、関数を
実行させるというのはどうでしょう?
毎回、条件を判断させるので、多少処理に負荷をかけるかも
しれませんが、これだと先に処理もしようがないと考えます・・。

参考になれば幸いです。
ゲスト
Åê¹ÆNo.5266
投稿日時: 2004-3-19 19:37
Re: 前処理を待ってから次処理を行いたい場合
ん?。完全に勘違いしていたらすみません。

外部データ取得の際には、データが莫大であろうがなかろうがイベントハンドラで解決できます。読み込みが完了していないのにハンドラに割り当てられた関数が実行されることはないからです。

通常の処理の際、例えば、
function foo(){
       for(......){
              処理1;
       }
       処理2;
}
foo();
処理3;

を実行していてforステートメントが完了していないのに処理3が走るということは、処理1で何らかのエラーが起こって、コールスタックから抜けた可能性が高いです。たとえforステートメントが無限ループを起こしていても処理3には行かないでしょう。

一度デバッガで追跡してみてはいかがでしょう?
ゲスト
Åê¹ÆNo.5267
投稿日時: 2004-3-19 19:41
Re: 前処理を待ってから次処理を行いたい場合
コマツ様

こんにちは。ご返答ありがとうございます

そうですね、これは良いかもしれませんね。
よく考えれば思いつきそうなものですが、お恥ずかしいです。。。

条件分岐による処理速度の問題は、さっそくこれから試してみようと思います。
参考になりました、ありがとうございます!
ゲスト
Åê¹ÆNo.5268
投稿日時: 2004-3-19 19:50
Re: 前処理を待ってから次処理を行いたい場合
引用:

外部データ取得の際には、データが莫大であろうがなかろうがイベントハンドラで解決できます。読み込みが完了していないのにハンドラに割り当てられた関数が実行されることはないからです。


むむ、やはりそうですか。。。
だとするとますます私のコーディング不具合の可能性が高くなってまいりました(--;)


引用:
一度デバッガで追跡してみてはいかがでしょう?


はい、もう一度初めから追跡していきたいと思います。
いろいろ、ご教授ありがとうございました!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops