Re: CPU使用率を抑えるには・・ ( No.1 ) |
- 名前:EMIYA 日時:2007/07/09 01:28
こんばんは、EMIYAと申します。
自分も、少々修行中なので、よくはわからないのですが・・・
こうしてみてはどうでしょう?
int FrameStartTime ; //60FPS固定用、時間保存用変数
SetDrawScreen( DX_SCREEN_BACK ) ; //描画先を裏画面にセット
SetWaitVSyncFlag( FALSE ) ; //垂直同期信号を待たない
FrameStartTime = GetNowCount() ; //60FPS固定用、時間保存用変数を現在のカウント値にセット
while( ProcessMessage() == 0 ) {
ClsDrawScreen() ; //画面のクリア
while( GetNowCount() - FrameStartTime < 1000 / 60 ) //1/60秒立つまで待つ
{
Sleep( 1 ) ;
}
FrameStartTime = GetNowCount() ; //現在のカウント値を保存
PutScreen() ; //画面描画
Exec() ; //ゲーム内処理
}
FPSについては、ここのサンプル?かどこかにあったものですが・・・
自分は、まだこれを試してないので効果はわかりませんが^^;
|
Re: CPU使用率を抑えるには・・ ( No.2 ) |
- 名前:SweetBlack 日時:2007/07/09 04:07
私も同じ事でずっと悩んでいます。
私が作ってるものは、普通の2Dゲームで
ヘボいプログラミング技術でムチャな処理させてるため
かなり負荷が掛かっているとは思うのですが、
PCの性能はそれなりに高いのにCPU使用率が酷いので
色々いじって調べてました。
ちなみに処理の流れは
・キャラの操作、移動処理
↓
・キャラの描画処理
↓
・画面表示(垂直同期信号待ち)
──のループという単純なもの。
色々調べたけれども、結局
「WaitVSync命令はCPU使用率を食う?」
「ScreenFlipによる同期待ちの場合はCPU使用率は食わない?」
という程度しか解らず、ScreenFlip命令や
Sleep命令でなんとかごまかすくらいの事しか
できていません。
(CPU使用率60〜80%まで抑えるのがせいぜい)
何かいい方法(一般的にはどうやっているのか等)がありましたら
私もご教示いただきたいです。
犬福さんの作られているものがどのようなものかは存じませんが、
「入力がなければ画面も変わらない」という事でしたら
リアルタイムゲームではないのでしょうか。
もしそうならいっそ入力がないときは画面の更新すらしなくするとか、
入力待ちの時にSleep命令を多目に入れてみるとかはどうでしょう。
|
Re: CPU使用率を抑えるには・・ ( No.3 ) |
- 名前:犬福 日時:2007/07/09 12:57
こんにちは!
>>EMIYAさん
レスありがとうございます
私も最初その方法を試してみたんですが、
イマイチ効果がありませんでした。
>>SweetBlack
レスありがとうございます。
あれから色々実験して、SweetBlackさんの
最後のアドバイスみたいな方式に落ち着きつつあります。
今作っているのはさほどリアルタイム性がない
ものなんですが、下記のような感じです
// 次回画面更新をするかを示すフラグ
bool needDraw = true;
while(ProcessMessage() == 0){
// フラグがたっていれば画面を更新し、フラグをクリア
if(needDraw){
PutScreen(); // ScreenFlip();はこの関数内で やっている
needDraw = false;
}
// ユーザの入力に応じて処理をする
// キャラの座標が変わったなどし、更新が必要ならフラグをセット
Exec();
// 使用率を下げるため適度にウエイトをかませる
WaitTimer(10);
}
これで最大60%ほどだった使用率を
20〜30%くらいまで減らせました。
ただFPSとか完全無視なので
動きのあるゲームには向かないかもですが・・。
|
Re: CPU使用率を抑えるには・・ ( No.4 ) |
- 名前:憂煉 日時:2007/07/09 15:14
犬福さんはじめまして!
WaitVSync();は環境によっては使わない時よりも重くなるので僕は使っていないのですが、画面更新も無くしてしまうと他のWindowが上に乗ってきた後にそのまま痕跡が残る事があるので最低毎秒二回位は更新しておいた方が無難です。フルスクリーン固定なら問題無いです。
|
Re: CPU使用率を抑えるには・・ ( No.5 ) |
- 名前:犬福 日時:2007/07/10 17:36
>>憂煉さん
こんにちは!
確かにそうですね。
デバッグ中は他のアプリを重ねることがなかったので
気づきませんでした^^;
ありがとうございます!
|