- ベストアンサー
C言語でのsleep機能について
- C言語でのsleep機能についての質問。
- C言語で3Dゲームを作る際に、1秒間に画面を更新する回数を決める方法について知りたい。
- 自作のsleep関数の精度と、Windowsで使えるsleep関数との比較について。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
スリープはOSのシステムコールなので、マルチプラットホーム用のライブラリでもなければ共通で使うことのできる関数は存在しません。 なおビジーループでWaitするのは自プロセスだけでCPUを占有する、マルチタスクに対する悪行です。 1/60秒ごとにタイマー割り込み/イベントが発生するようにして、そのハンドラで処理した方が良いでしょう。
その他の回答 (3)
- 和泉 博(@hiroshi09s)
- ベストアンサー率54% (59/109)
Unix系のsleepには、1秒毎のsleep()と、精度をナノ(?)に上げたnanosleep()の2つがあります。 質問は「1/60のsleepがしたい」とのことですので、nanosleep() を使うことになります。 その機能については、terminal から「man nanosleep」とすれば知ることができます。あるいは、Xcodeの「ヘルプ」でも良いでしょう。 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/signal.2.html タイミング等の都合による sleep中のwakeupシグナルは、signalハンドラー登録後、kill()で強制的に起こしてやれば良いです。
- tsuduki123
- ベストアンサー率32% (21/65)
ところで、ゲームの種類は? 画面の更新タイミングは、ジャンルによって違うと思いますよ。 あと、3Dゲームって作ったことありませんが、一定間隔ごとに画面更新するものなのですか? 2Dだと、表示内容に更新が発生したときに最後一括して更新していたものですが。 # ベンチマークは、秒間何回処理できるをはかるものなので # FPSが表示されているんじゃないかとちょっと思ってみたり(推測)
お礼
ゲームのジャンルはアクションです。詳しく言うとブロック崩しを作っているのですが、ボールは常に動いていますし、よくあるブロック崩しとちがって、ブロックも常に動いている(手前に前進してきている)状況です。 パズルゲーム等だったら、クリックされたときに更新などで、対応できそうなのですが>< でも、工夫すればWaitを掛けなくても良い方法もあるかもしれませんね。 回答ありがとうございました^^
- tyatsumi
- ベストアンサー率58% (30/51)
GLUTにglutTimerFunc()というのがあって、 指定した時間後に指定したコールバック関数が呼ばれるようです。 これを使えばどのOSでも同じように書けそうです。GLUTから離れられなくはなりますが。 試したことはないので、実用的なのかどうかは知りません。 ただ、こんな関数を見付けたので報告したところです。
お礼
GLUTにそんな関数があったんですね。 まさかGLUTの中にあるとは思っていなかったので、調べていませんでした>< ありがとうございます また使ってみます^^
お礼
>>なおビジーループでWaitするのは自プロセスだけでCPUを占有する、マルチタスクに対する悪口です。 やっぱり、そうですよね。意味も無いループを繰り返してWaitしても、なんか気持ち悪いと思っていました>< あまりタイマー割り込みイベント等の知識は無いのですが、また勉強してみます^^ 回答ありがとうございました。