トップページ > 過去ログ > 記事閲覧
1フレーム当たりの時間
名前:imo 日時: 2007/10/02 20:34

少し説明し辛いのですが、 プログラムの動作速度について質問があります。 当方の開発環境はBCC、DXライブラリは なるべく最新版にて行っています。 作成したプログラムを実行した時に、 まれに(再現頻度がまちまち)動作速度が 半分ほどのままで固定される現象が起こります。 平常時FPSが60前後のところ30前後のままで プログラムを起動し直さないと直らない という感じです。 ソースの中身をFPSを測定する記述だけにして 実行しても同じでした。 なお、これらの現象が起こるときは もちろんCPU等に負荷のかかっていない (他に何も動かしていない)状態です。 速度が落ちた時のログファイルを見たところ、 1598:1フレーム当たりの時間は 33 msecです 1599:Tri00:33 msec 1601:Tri01:17 msec 1611:Tri02:16 msec 1613:Tri03:33 msec と、ここの1フレームあたりの時間が通常時の半分に なっている時のみ起こると予想したのですが……。 普段は16msec〜17msecにもちろんなります。 起動時の1フレームあたりの時間によって、 実行速度の最大値が固定されるのでしょうか? まれとは言っても、プログラムをテスト起動していると そこそこの確率でこの状態が起こります。 見当違いな質問かもしれませんが、 どうにも原因が気になって仕方がないのと、 なるべく動作速度を安定させたいので わかる方がおられましたらよろしくお願いします。

Page: 1 |

Re: 1フレーム当たりの時間 ( No.1 )
名前:優柔不断 日時:2007/10/03 23:37

それってこんな感じでしょうか。 #include"DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int begin,count=0; if(DxLib_Init()==-1)return -1; SetDrawScreen(DX_SCREEN_BACK); ScreenFlip(); begin=GetNowCount(); while(ProcessMessage()!=-1){ count++; ScreenFilp(); fps=(GetNowCount()-begin)/count; ClearDrawScreen(); DrawFormatString(0,0,GetColor(255,255,255),"%dmsec,fps); } DxLib_End(); return 0; } このプログラムは、×による強制終了しかありません。しかし、必要最低限の記述なのでそんなに負担は、 大きくないはずです。
Re: 1フレーム当たりの時間 ( No.2 )
名前:imo 日時:2007/10/03 23:53

わかり辛い文章で申し訳ありません。 えーと、FPS自体は求められています。 そこで求めたFPSを計ると、 負荷がかかってない状態にもかかわらず 半分ほどしか速度が出ない時が 一定の確率で起こるので悩んでいます。 キーの状態などの取得処理や描画処理も半分の速度になるので、原因を特定して直したいのですが。 いまのところ、FPSを測って描画表示する、 という処理だけでも起こるので判断しかねています。
Re: 1フレーム当たりの時間 ( No.3 )
名前:キーチック 日時:2007/10/04 15:49

ハードウェアに依存する問題のような気がしますが,そのあたりはどうなのでしょうか. たとえばノートPCでは電池保護のためにCPUクロックを落としますし,デスクトップでもCPUの温度によって動作速度を調節するものがあったような気がします. 後は通信関係で,知らぬ間にパケットをやり取りしていて…ということを私は経験したことがあります.(もちろん原因はワームでした…)
Re: 1フレーム当たりの時間 ( No.4 )
名前:imo 日時:2007/10/04 19:57

なるほど。やはり環境特有の症状というのも怪しそうですね……。 CPU等の速度調節機能はハードにもソフトでも入れていないので、 それ以外の原因かもしれません。 通信による速度低下は同じく経験あります。 ワームだかスパイウェアでしたが、 あれだと全体的に処理落ちしていたようなので プログラム単体とハードの相性なのかもしれません。 とりあえずは、他のPCでもチェックしてみようかと思います。

Page: 1 |