Re: 2.25bだと動かなくなる場合あり ( No.1 ) |
- 名前:キーチック 日時:2009/05/03 05:25
症状としては,画面表示がされて,Whileでループ回して計算しているはずだけど
計算した結果が表示されないという状態.
Whileではじまってから,DXライブラリ関係を一々コメントアウトしてみましたが
これといった変化無し.
動くプログラムと動かないプログラムとの最大の差は使用するメモリ容量.
とにかく,配列変数宣言しまくってます.
そんなところで...
|
Re: 2.25bだと動かなくなる場合あり ( No.2 ) |
- 名前:管理人 日時:2009/05/03 11:52
ご報告有難うございます
プログラム自体は動いているのに、表示だけが全く行われないということでしょうか?
それともどこかのタイミングで「不正な処理が発生した」等の類が発生してプログラムがストップしてしまうということでしょうか?
|
Re: 2.25bだと動かなくなる場合あり ( No.3 ) |
- 名前:キーチック 日時:2009/05/03 17:06
「不正な処理が発生した」です.
このときのDXライブラリのログを見ても特に異常がどうこうは書いてありません.
むしろ,2.25のときよりBitBlt関連の時間が短縮されていて良い感じに見えるくらいです.
if( ProcessMessage() == -1 ) break ;
をループ中に若干追加してみましたが改善は見られません.
|
Re: 2.25bだと動かなくなる場合あり ( No.4 ) |
- 名前:管理人 日時:2009/05/03 23:39
ご返答有難うございます
すいません、更に幾つかご質問させてください
1.CreateThread 等を使用して複数のスレッドを使用していますでしょうか?
2.「不正な処理が発生した」で停止するのはDXライブラリの何の関数か判りますでしょうか?
|
Re: 2.25bだと動かなくなる場合あり ( No.5 ) |
- 名前:キーチック 日時:2009/05/04 01:31
1. SetMultiThreadFlag(TRUE);は使用しています.
2. 色々調べてみまして,エラーがでる・でないの違いが分かりました.
描画処理を行う時,1.全て表示する 2.条件に合うもののみ表示する という
スイッチをつけているのですが,1.にするとエラーが起こりません.
2は1の関数にifを何ヶ所かに追加しただけの別関数でDXライブラリの
関数使用自体に違いはありません.
ここまでわかったので,ログを書き出して比較してみましたところ,
エラーがでる方は,「サーフェス間転送には BitBlt を使用します」
「BitBlt:2651μs BltFast:3536μs」
エラーがでない方は,「サーフェス間転送には BltFast を使用します」
「BitBlt:10237μs BltFast:3710μs」
という違いがありました.
また,エラーがでない方は空きメモリが20MBほど少なくなるようです.
この程度の情報で何か分かりますでしょうか.
|
Re: 2.25bだと動かなくなる場合あり ( No.6 ) |
- 名前:管理人 日時:2009/05/04 01:56
ご情報有難うございます
BitBlt が異様に遅くなるという現象は不思議ですが、なぜそうなるのかは現時点では判りません
申し訳ありませんがもう少しご質問させてください
1.SetMultiThreadFlag は使用しているけど、CreateThread 等でマルチタスク処理はしていない、ということで宜しいでしょうか?
2.Visual C++ でしたら「不正な処理が発生した」時点のデバッグ画面で、プログラム中のどの箇所で停止したかを
確認することができると思いますが、それはDXライブラリの関数内ではないのでしょうか?
もしDXライブラリの関数内でしたら、その関数名を教えていただけないでしょうか?
|
Re: 2.25bだと動かなくなる場合あり ( No.7 ) |
- 名前:キーチック 日時:2009/05/04 04:33
申し訳ありません.
どうやら解決しました.
DXライブラリが直接の原因ではなかったようです.
自作関数内で条件分岐するときに,3重ループ+条件分岐による1重ループを
選択ということをやっているのですが,1ヶ所だけ変数を0で初期化すべき場所を
初期化せず使用していました.
2.25では,幸か不幸か初期化していない変数が0に自動設定していたようなのですが,
2.25bになって,変数が不定となった結果,妙なメモリ領域にアクセスしようとして
「不正な処理が発生した」となっていたようです.
C言語的にはむしろ2.25bの動作の方が正常というべきでしょう.
お騒がせして申しわけありませんでした.
今後ともよろしくお願いします.
|