• R/O
  • HTTP
  • SSH
  • HTTPS

sdl2referencejp: コミット

SDL2.0の日本語リファレンスマニュアル


コミットメタ情報

リビジョンc57d2b4e38b431a9d60ee549901b4f45908ad8e0 (tree)
日時2018-06-14 00:40:45
作者maruhiro <maruhiro@brid...>
コミッターmaruhiro

ログメッセージ

SDL_atomic_t サンプルコードを追加 https://wiki.libsdl.org/SDL_atomic_t?action=diff&rev1=2&rev2=3

変更サマリ

差分

--- a/SDL_atomic_t.html
+++ b/SDL_atomic_t.html
@@ -17,6 +17,67 @@
1717 <table border="1" summary="SDL_atomic_t">
1818 <tr><td>int</td><td>value</td><td>アトミック整数値</td></tr>
1919 </table>
20+<h2>サンプルコード</h2>
21+<p>
22+<code>
23+<pre>
24+/* これはFPSをカウントするサンプルである
25+ *
26+ * SDLタイマは別のスレッドで動いている
27+ * そのためデータ競合を防ぐ必要である
28+ */
29+SDL_atomic_t frames;
30+
31+/* 設定された間隔で平均フレームレートの計算と表示を行う */
32+Uint32 fps_timer_callback(Uint32 interval, void *data)
33+{
34+ const float f = SDL_AtomicGet(&frames);
35+ const float iv = (float)interval / 1000.0f;
36+ printf("%.2f\tfps\n", f / iv);
37+
38+ /* フレームカウンタをリセットする */
39+ SDL_AtomicSet(&frames, 0);
40+
41+ return interval;
42+}
43+
44+int main(int argc, char **argv)
45+{
46+ SDL_Init(SDL_INIT_EVERYTHING);
47+ SDL_Window *win = SDL_CreateWindow("Counter",
48+ SDL_WINDOWPOS_CENTERED,
49+ SDL_WINDOWPOS_CENTERED,
50+ 640,
51+ 480,
52+ 0
53+ );
54+
55+ SDL_Surface *screen = SDL_GetWindowSurface(win);
56+
57+ /* タイマは別スレッドで5秒間隔で動く */
58+ SDL_AddTimer(5000, fps_timer_callback, NULL);
59+
60+ SDL_Event e;
61+ while(1) {
62+ while (SDL_PollEvent(&e)) {
63+ if (e.type == SDL_QUIT) {
64+ goto quit;
65+ }
66+ }
67+ SDL_FillRect(screen, NULL, 0xffffffff);
68+ SDL_UpdateWindowSurface(win);
69+
70+ /* フレーム数に1を加える */
71+ SDL_AtomicAdd(&frames, 1);
72+ }
73+quit:
74+ SDL_DestroyWindow(win);
75+ SDL_Quit();
76+ return 0;
77+}
78+</pre>
79+</code>
80+</p>
2081 <h2>詳細</h2>
2182 <a href="SDL_atomic_t.html">SDL_atomic_t</a>は構造体なので間違って演算子で操作することがない.
2283 アトミック操作関数では整数の値としてこれを使う必要がある.
旧リポジトリブラウザで表示