回答編集履歴

2

追記

2018/11/16 07:04

投稿

ttyp03
ttyp03

スコア16998

test CHANGED
@@ -5,3 +5,71 @@
5
5
  Unix系ならnanosleepというのが使えるようですが、Windows系だと(あまり調べてませんが)なさそうです。
6
6
 
7
7
  似たようなものを自作するしかないかもしれません。
8
+
9
+
10
+
11
+ 追記
12
+
13
+ Sleepに頼らない作りを考えてみました。
14
+
15
+ こういうつくりの方が環境に左右されず、現実的かもしれません。
16
+
17
+ 適当に書いたので計算とか間違ってたらすみません。
18
+
19
+ ```cpp
20
+
21
+ int main()
22
+
23
+ {
24
+
25
+ QueryPerformanceFrequency(&_frequency);
26
+
27
+ QueryPerformanceCounter(&_now);
28
+
29
+
30
+
31
+ while (true)
32
+
33
+ {
34
+
35
+ _prevNow = _now;
36
+
37
+
38
+
39
+ // 処理
40
+
41
+ // 処理
42
+
43
+ // 処理
44
+
45
+
46
+
47
+ double end = _prevNow.QuadPart / (double)_frequency.QuadPart + (1.0f / 60.0f);
48
+
49
+ while(1){
50
+
51
+ QueryPerformanceCounter(&_now);
52
+
53
+ double now = _now.QuadPart / (double)_frequency.QuadPart;
54
+
55
+ if(end <= now) break;
56
+
57
+ }
58
+
59
+
60
+
61
+ LONGLONG delta = _now.QuadPart - _prevNow.QuadPart;
62
+
63
+ double deltaTime = (double)delta / (double)_frequency.QuadPart;
64
+
65
+ double fps = 1.0f / deltaTime;
66
+
67
+ cout << "FPS : " << fps << endl;
68
+
69
+ }
70
+
71
+ }
72
+
73
+
74
+
75
+ ```

1

脱字

2018/11/16 07:04

投稿

ttyp03
ttyp03

スコア16998

test CHANGED
@@ -1,6 +1,6 @@
1
1
  WindowsAPIのSleepは引数がDWORDですし精度がミリ秒なので、それの影響ではないでしょうか。
2
2
 
3
- FPS値大きくなるときは、直前のrestTimeは0.0008とかの小さい値でしたので、1000倍しても値は0になってしまい、期待しているウェイトにはなっていないと思われます。
3
+ FPS値大きくなるときは、直前のrestTimeは0.0008とかの小さい値でしたので、1000倍しても値は0になってしまい、期待しているウェイトにはなっていないと思われます。
4
4
 
5
5
  Unix系ならnanosleepというのが使えるようですが、Windows系だと(あまり調べてませんが)なさそうです。
6
6