- ゲームプログラムなら俺に聞け33©2ch.net
216 :デフォルトの名無しさん[]:2017/03/24(金) 15:01:57.71 ID:nzFyEvW1 - FPSを60にするとして、1フレームにかかった時間が1/60sec未満の場合
余った時間をsleepしたい WindowsだとSleep()のデフォルト精度は10ms程度なので timeBeginPeriod()とtimeEndPeriod()で高分解化する必要がある訳だが これらの関数はどこに配置するべきだろうか? プログラムの先頭にtimeBeginPeriod()、終了時にtimeEndPeriod()だと 例外で落ちた時や、デバッガによる強制終了時にはtimeEndPeriod()が呼ばれない気がする Sleep()の前後に挟む場合、これらの関数を呼ぶ回数が増大し ハードへの影響が気になるし どうするのが一般的何でしょうか?
|
- ゲームプログラムなら俺に聞け33©2ch.net
220 :デフォルトの名無しさん[]:2017/03/24(金) 16:29:29.56 ID:nzFyEvW1 - 調べたところtimeBeginPeriod()とtimeEndPeriod()を
頻繁に呼ぶと時計がずれるらしいです。 Sleep()の前後に挟むのはNGかも・・ >>219 特定のスレッドに閉じた形でタイマの分解能を変化させることが出来るんですか? Sleepってのはスレッドを起こす仕組みですよね? 特定のスレッドは1msで起こして、それ以外は16msで起こすとか出来るんでしょうか?
|
- ゲームプログラムなら俺に聞け33©2ch.net
221 :デフォルトの名無しさん[]:2017/03/24(金) 16:33:07.09 ID:nzFyEvW1 - std::this_thread::sleep_for()を試したところ
timeBeginPeriod()を置かなくても分解能は1msになっていました。 内部はよくわかりませんが、とりあえずこれで実装します。 どうもです。
|
- ゲームプログラムなら俺に聞け33©2ch.net
222 :デフォルトの名無しさん[]:2017/03/24(金) 16:36:51.08 ID:nzFyEvW1 - いや、ちょっと違うなあ・・
>>221は間違っているかもしれません。 スレ汚しすみません。
|