トップページ > 過去ログ > 記事閲覧
終了されない
名前:kari 日時: 2008/01/27 12:29

はじめまして。 現在DXライブラリを使用してシューティングを製作しているのですがちょっと問題が… ゲーム進行中ある程度時間が経つとメモリの使用量が急に60Mから53M程度に下がってその状態になって終了した場合完全に終了されず、メモリを8M程度使用して画面にはないが走りっぱなし、といった状態になります(分かりにくくてすみません)。 これは具体的にはどういったことが原因でしょうか。

Page: 1 |

Re: 終了されない ( No.1 )
名前:ライブラリ使用者 日時:2008/01/27 21:38

DXライブラリが正常終了していないだと思います。 (DxLib_End()を呼んでいない、または呼び出さずに終了するケースがる) メモリ使用量はなんともいえないですね(もう少し情報が必要かと)。DxLib_End()を呼んでいないことからのメモリ開放漏れが一番可能性は高いかもしれません。 >メモリの使用量が急に60Mから53M程度に下がって まずは、ここがどのような状況で、どこのソースで発生するかをデバッグなどで特定するのが解決の近道と思います。
Re: 終了されない ( No.2 )
名前:kari 日時:2008/01/27 23:23

ライブラリ使用者さん有難う御座います もう少し調べてみます
Re: 終了されない ( No.3 )
名前:管理人 日時:2008/01/28 00:32

タスクマネージャにソフトのプロセスが残ったままなのでしたら、 恐らくソフトが終了していないのだと思います。 DxLib_Init を実行したさいに登場するウインドウは×ボタンを押せば 消えますが、ソフトの終了とはイコールではありません。 ウインドウが閉じられると ProcessMessage 関数の戻り値が -1 に なりますが、ソフトは終了していませんので、-1 を返すようになったら WinMain を return で抜けるところまで実行されるようにしてみてください。
Re: 終了されない ( No.4 )
名前:kari 日時:2008/01/28 02:10

管理人様有難う御座います 明日にでも確認してみます
Re: 終了されない ( No.5 )
名前:kari 日時:2008/01/29 18:26

すみません、色々試してみましたが やはりはじめに書いた現象が起きた後は完全に終了されないようです。 それ以外の状況ならウィンドウの×ボタンを押したりメニュー画面で終了を選択すると終了します。 FPSを見る限り大丈夫とは思いますが… どこかの処理に時間が掛かりすぎてProcessMessage関数を 特定時間内に呼び出せていない、といった場合も このような現象が起きたりするのでしょうか
Re: 終了されない ( No.6 )
名前: 日時:2008/01/30 07:42

>メモリの使用量が急に60Mから53M程度に下がって まず気になる点から。 メモリ使用量とはどこのものを指しますか? または、どの様にして確認しましたか? また、終了されていないというのはどの様に確認 しましたか? >FPSを見る限り大丈夫 何を根拠に大丈夫とおっしゃっていますか? 今回の問題的にはFPSは直接関係無いような 気がしますが。。。 >どこかの処理に時間が掛かりすぎて >ProcessMessage関数を特定時間内に呼び出せてない ウィンドウの×ボタンを押した場合を例にすると ProcessMessageが呼ばれない場合、×ボタンを おされたというメッセージが処理されない為、 ウィンドウすら消えないはずです。 今回のような現象の場合だと考えられるのは タイミングによって、ウィンドウの破棄が 行われた後、quitのメッセージが来てから アプリケーションが終了するという運びになるので このときのProcessMessageの呼び出しが遅れると ウィンドウ破棄はできてウィンドウは消えたけど タスクには残っている状態になる可能性もあります。 #ただし次のProcessMessageの呼び出しで終了する #ハズなのでずっと終了しないのであれば別の可能性 #のほうが高いでしょう。 他には使用したスレッドが終了していないなどが 考えられます。
Re: 終了されない ( No.7 )
名前:crow 日時:2008/01/30 20:08

横から失礼します。 > それ以外の状況ならウィンドウの×ボタンを押したり > メニュー画面で終了を選択すると終了します。 「メニュー画面」というのはゲーム内の自作の物のことでしょうか? 基本的に×ボタンやESCキーで終了させたり、 ゲーム内のメニューで終了させるなどの機能は、 プログラマーが自分で作る必要のある物です。 ウィンドウズに標準で備わっている機能ではありません。 ですから、正常に終了しない場合はまず終了部分のプログラムを しらみつぶしに確認してみることをお勧めします。 ライブラリ使用者さんが言ってるように、 DxLib_End()を呼び出さないで終わるケースが怪しいような気もします。
Re: 終了されない ( No.8 )
名前:kari 日時:2008/01/30 21:40

遅れまして申し訳ありません >メモリ使用量とはどこのものを指しますか? 画像のみの場合は同様にガクッと突然下がったのですが、 音楽のみの場合は確認できませんでした >または、どの様にして確認しましたか? タスクマネージャを常に見ながら確認しました >また、終了されていないというのはどの様に確認 しましたか? これもタスクマネージャで、です >「メニュー画面」というのはゲーム内の自作の物のことでしょうか? 選択肢の”終了”を選択すると while(ProcessMessage()==0) のループをbreakで抜けて DxLib_End(); return 0; といった感じです
Re: 終了されない ( No.9 )
名前:憂煉 日時:2008/01/31 19:11

kariさんこんにちは タスクマネージャによるメモリ使用量の把握はちょっと危険です。特に音関係のデータはWindowsが勝手に仮想メモリに移動してたりします。 タスクマネージャのデフォルトの設定で表示される使用量は”物理メモリ上で使われているメモリの量”で、”プログラムが実際に使っているメモリ量”では無いからです。 正しい使用量を確認する方法をあげます。 @タスクマネージャのメニューバーにある「表示」を開く A「列の選択」を開く B「仮想メモリ」のチェックボックスにチェックを入れる これでHDD上の仮想メモリの状態がわかるようになるので、「メモリ使用量」と「仮想メモリ サイズ」のデータの合計値で判断してください。
Re: 終了されない ( No.10 )
名前: 日時:2008/01/31 19:50

私が危惧していたことは、憂煉さんの書いている事 と大体同じですが見ているところがもしもプロセス タグではなくパフォーマンスタグならもっと大変です タスクマネージャのパフォーマンスにあるグラフは あくまでもシステム全体のページファイル使用量で 特定のプロセスのものではありません。 ちなみにこれらを視覚的に確認する場合は、 システムのパフォーマンスモニタなどを使うと 出来ると思います。
Re: 終了されない ( No.11 )
名前:kari 日時:2008/01/31 20:11

すみません、一応プロセスタグで確認してました。 また当方Vistaで動作確認してましたが XPで動作を確認したところ、エラー報告がでますが 終了はされているようでした。
Re: 終了されない ( No.12 )
名前:ライブラリ使用者 日時:2008/02/02 14:27

現状だと仮定の話の域を出ないように思えます。 少しソースを出してはいかがでしょう? >メモリの使用量が急に60Mから53M程度に下がる なんて状況は、言葉の説明だけでは判断がつかないと思います
Re: 終了されない ( No.13 )
名前:kari 日時:2008/02/03 17:40

遅れまして申し訳ありません 何度も色々テストした結果上の現象は関係なく 特定の敵のショットパターンが原因のようです その敵を消したところ問題が発生しなくなりました もう少し調べてみます
Re: 終了されない ( No.14 )
名前:ZER0 日時:2008/02/05 04:59

kariさん、メニュー画面で終了もその状態になったら出来ないと言う事なのですか? もう試したかもしれませんが、 ↑がもし可能なのでしたら、xボタンによるライブラリの自動終了を切って 自らxボタンの入力を取得して終了してはどうでしょうか? 自分はこの方法でxボタンを押しても終了しないのを回避しています。 (ループを抜けてどの場所でも最後にDxLib_End()を実行かつ ProcessMessageを毎ループする文。ですが終了しない状態が自分の状態 +ちなみにXP) 初心者なので詳しいことは分からないですが駄目もとで試してみてください。

Page: 1 |