- ベストアンサー
1秒毎に1カウントアップ
1秒経つとカウントを一つアップするというプログラムを作ろうと思いますが、sleep関数を使う事でOKでしょうか? ネットで調べてみるとsleep関数の精度はあまり高くないと書かれていました。カレンダーを表示するプログラムに使いたいのであまり精度が悪いと困ってしまいます。もし何か他に良い方法があれば教えてください。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
OSがWindowsで言語がC、Win32を使うものと 仮定しますと SetTimer関数を使用します 使用方法は以下のURLです http://yokohama.cool.ne.jp/chokuto/advanced/function/SetTimer.html
その他の回答 (3)
- thamansa
- ベストアンサー率40% (95/232)
1秒たったらカウントアップする考え方では、ほかのアプリケーションがCPUを一時的に占有してしまった場合などに2~10秒くらいカウントが ストップしてしまうことになります。 100ミリ秒ごとに現在時刻をチェックして、前回チェックした値と今回の値の差をとり、その秒数ぶんだけカウントアップさせるのはどうでしょうか。
お礼
ご提案ありがとうございます。 担当者ともうちょっと話と詰めてからまた改めてご質問させていただきます。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★補足要求します。 ・Win32 アプリケーション(GUI)ですか、コンソール・アプリケーション(GUI)ですか? これにより、アドバイスが変わりますが…。 それから sleep という名前は、どのプラットホームですか? Win32 API に Sleep() 関数がありますがこれのことですか? ・SetTimer()、GetTickCount()、Sleep() は誤差がかなり出ます。 マルチメディア・タイマーを使う方法もありますが、GetTickCount() を上手く 工夫すれば誤差が出ない1秒毎に1カウントアップすることも出来ます。 ・まずは GUI、CUI なのかを教えてもらいたいです。 あとカレンダーを表示するプログラムとは、時計ソフトのことでしょうか? それともストップウォッチのような精度を持つ、カウントダウンでしょうか? もう少し詳しい内容が欲しいです。 ・以上。待っています。
お礼
詳しいご質問ありがとうございました。 実は私も詳細が分からないというのが本当の所です。 上司に「1秒経つ毎にカウンターを一つ上げるプログラムをCで作れ」といわれました。与えられた仕様は構造体の内容だけだったのです。 どうも制御系の処理の一部として使うようです。 すいません、情報が足りなくて。
- ddnp009
- ベストアンサー率25% (15/58)
>>sleep関数を使う事でOKでしょうか? その誤差がどの程度のものであるか、実際に試してみればいい。 #include <stdio.h> #include <windows.h> int main(void) { while (Sleep(1000), 1) puts("OnTime"); return 0; } 精度はミリ秒単位の話。 カレンダーのアプリケーションに、そこまでの精度は必要ないと思いますよ。
お礼
ありがとうございます。 そうですね、よく考えるとそんなに精度は必要ないですね。
お礼
早速のご解答ありがとうございます。 ちょっと難しそうですね。 言語はC、OSはWinXPでした。