プロが教えるわが家の防犯対策術!

メインFormのonCreateで、外部の設定ファイルを読んで、フォーム上に必要なオブジェクトを生成して、それらの準備が完了したらタイマーをスタートさせてゲーム開始、というシナリオを実現したいのですが、onCreateで生成命令を出したあと、準備が終わったというのはどうやって判定するのがいいでしょうか。

onCreateの一番最後でタイマーを作動させたところ、まだオブジェクトの準備が終わっていないようで、PCの処理速度によってはアクセス違反が起こってしまいました・・・。

onCreate内で生成しようとしたオブジェクトの実体があるかを逐一チェックして、無かったら作られるまでwaitをかけるという方法もあるかもしれませんが、音声と映像だけで200個近くあるので、一個ずつやるのは辛いです・・・(汗

A 回答 (3件)

再びこんにちは。



動作を確認出来る最低限のソースを掲載された方がより詳しい方から「ここがまずい」ってレスが付き易いのでは、と申し上げたつもりだったのですが。。処理の流れだけでは。(^^;

それほど詳しい訳ではないのでハズしているかもしれませんが、オブジェクトの動的生成に失敗しているか、別のThreadで動かしているって事は無いですか?
であれば、どこに書いても発生する可能性がありますね。

ちなみにTCustomForm.OnCreateのヘルプによれば、下記の順でイベントが発生するようです。

 # フォームが作成されるとき,Visible プロパティが
 # True であればイベントが以下の順序で発生します。
 # 1. OnCreate
 # 2. OnShow
 # 3. OnActivate
 # 4. OnPaint
    • good
    • 1
この回答へのお礼

ありがとうございます。
onCreateを見たところ、1,250行もあり、簡単に解説できる状態ではありませんでした(汗
動的生成の部分で何かしらがあるんでしょうね・・・タイマーのスタートを自動的にしなければ問題は起こらないので、ワンクッション入れてクリックしたらスタート、みたいな感じでまずは作り、解決策を探していこうと思います。

お礼日時:2003/07/18 15:37

こんにちは。



> onCreateの一番最後でタイマーを作動させたところ、
> まだオブジェクトの準備が終わっていないようで、
> PCの処理速度によってはアクセス違反が起こってしまい
> ました・・・。

PCの速度によってアクセスバイオレーションが発生するなんて、そもそもその処理が危ういような気がします。

どんな処理を書かれているのか、再現出来るソース(簡略化してもの)があると答えが得られやすいかも。

この回答への補足

そうですか・・・CDに焼いて実行すると、リソースを読むのに時間がかかり、コケてしまうような印象がありました(HDDだと上手く行っています)。

Form1.onCreate begin
 設定ファイル.open
 設定ファイル.読み込み
 設定ファイル.close
 imageの読み込み
 imageをFormに配置
 waveの読み込み
 waveからDirectSoundオブジェクトを生成
 Timer.start
end;

滅茶苦茶簡単ですが、このような処理を行っています。(onTimer内では周期的に演算を行い、image,soundにアクセスしています)

補足日時:2003/07/07 22:31
    • good
    • 0

onCreateが終わったら Formのアクティブのイベントが


発生すると思いますが・・・。
    • good
    • 0
この回答へのお礼

助言ありがとうございます。Formに属するものが全部出そろったらonActivateが発生する、ということでよろしいでしょうか?試してみます。

お礼日時:2003/07/06 21:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!