トップページ > 過去ログ > 記事閲覧
2.25bだと動かなくなる場合あり
名前:キーチック 日時: 2009/05/03 05:10

タイトルの通りです. 2.25bに入れ替えると動作しなくなるプログラムがあります. とりあえず試した環境はWindowsXP VC++2005 2.25に戻すと問題なく動作します. なお,入れ替えて問題なく動作していたプログラムもありますので原因がプログラム環境とは言えないような気がします. 更新履歴から,問題のプログラムで使用していない関数関連を外すと以下のようになります. 2.25で今のところ不都合は無いのですが,一応ご報告ということで.      スレッドセーフの関数を限定した場合も ProcessMessage を呼び続ける関数を     使用していたためにメモリリークが発生していたバグを修正。      一部環境で起動時間が遅くなる原因となっていた処理の変更。      ソフトウエアで扱う画像データハンドルも、グラフィックハンドルと同様に     無効なハンドルをソフトウエア画像ハンドルを扱う関数に渡してもメモリの     不正なアクセスが起きないように、また、DxLib_End を実行した場合は未削除の     ソフトウエア画像ハンドルが全てそこで削除されるように内部処理仕様を変更。      動画をオーバーレイモードで再生した場合、最初に一瞬だけ乱れた画像が     表示されるバグを修正。      ウインドウモードでオーバーレイを使用した動画再生を使用した場合、他の     ウインドウがオーバーレイ領域の上に来た際に表示領域を狭める、若しくは     消すように処理を変更。      CheckHitKeyAll でマウスの入力を見るのはウインドウのクライアント領域内にある場合のみに処理を変更。

Page: 1 |

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の動作の方が正常というべきでしょう. お騒がせして申しわけありませんでした. 今後ともよろしくお願いします.

Page: 1 |