前提・実現したいこと
C++のコンソールアプリケーションでフレームレート(FPS)を固定しようと思い、以下のような短いサンプルを作ってみました。すると、1フレームごとに正しい結果が得られますが、もう1フレームは高いFPSが出てしまいました。
どこかロジックに穴があるような気がしますが、煮詰まってしまいました。
どのようにしたらいいでしょうか?
ソースは下の一種類のみです。
該当のソースコード
#include "pch.h" #include <iostream> #include <Windows.h> using namespace std; LARGE_INTEGER _frequency; LARGE_INTEGER _now; LARGE_INTEGER _prevNow; int main() { QueryPerformanceFrequency(&_frequency); QueryPerformanceCounter(&_now); QueryPerformanceCounter(&_prevNow); while (true) { QueryPerformanceCounter(&_now); LONGLONG delta = _now.QuadPart - _prevNow.QuadPart; double deltaTime = (double)delta / (double)_frequency.QuadPart; _prevNow = _now; double fps = 1.0f / deltaTime; cout << "FPS : " << fps << endl; double restTime = 1.0f / 60.0f - deltaTime; double restCnt = 0.0f; if(restTime > 0.0f) Sleep(restTime * 1000.0f); } }
出力結果
FPS : 52.5868 FPS : 1048.39 FPS : 52.2822 FPS : 1091.58 FPS : 59.2504 FPS : 989.648 FPS : 55.306 FPS : 738.861 FPS : 53.4224 FPS : 844.888 FPS : 60.5546 FPS : 745.414 FPS : 59.4455 FPS : 911.216 FPS : 56.0977 FPS : 958.138 FPS : 55.9818 FPS : 936.421 FPS : 58.9909 FPS : 836.193 FPS : 60.433 FPS : 1169.63
補足情報(FW/ツールのバージョンなど)
VS2017
回答4件
あなたの回答
tips
プレビュー