アプリ版:「スタンプのみでお礼する」機能のリリースについて

1秒経つとカウントを一つアップするというプログラムを作ろうと思いますが、sleep関数を使う事でOKでしょうか?

ネットで調べてみるとsleep関数の精度はあまり高くないと書かれていました。カレンダーを表示するプログラムに使いたいのであまり精度が悪いと困ってしまいます。もし何か他に良い方法があれば教えてください。よろしくお願いします。

A 回答 (4件)

1秒たったらカウントアップする考え方では、ほかのアプリケーションがCPUを一時的に占有してしまった場合などに2~10秒くらいカウントが


ストップしてしまうことになります。
100ミリ秒ごとに現在時刻をチェックして、前回チェックした値と今回の値の差をとり、その秒数ぶんだけカウントアップさせるのはどうでしょうか。
    • good
    • 1
この回答へのお礼

ご提案ありがとうございます。

担当者ともうちょっと話と詰めてからまた改めてご質問させていただきます。

お礼日時:2007/05/19 11:33

★補足要求します。


・Win32 アプリケーション(GUI)ですか、コンソール・アプリケーション(GUI)ですか?
 これにより、アドバイスが変わりますが…。
 それから sleep という名前は、どのプラットホームですか?
 Win32 API に Sleep() 関数がありますがこれのことですか?
・SetTimer()、GetTickCount()、Sleep() は誤差がかなり出ます。
 マルチメディア・タイマーを使う方法もありますが、GetTickCount() を上手く
 工夫すれば誤差が出ない1秒毎に1カウントアップすることも出来ます。
・まずは GUI、CUI なのかを教えてもらいたいです。
 あとカレンダーを表示するプログラムとは、時計ソフトのことでしょうか?
 それともストップウォッチのような精度を持つ、カウントダウンでしょうか?
 もう少し詳しい内容が欲しいです。
・以上。待っています。
    • good
    • 0
この回答へのお礼

詳しいご質問ありがとうございました。
実は私も詳細が分からないというのが本当の所です。

上司に「1秒経つ毎にカウンターを一つ上げるプログラムをCで作れ」といわれました。与えられた仕様は構造体の内容だけだったのです。

どうも制御系の処理の一部として使うようです。

すいません、情報が足りなくて。

お礼日時:2007/05/19 11:32

>>sleep関数を使う事でOKでしょうか?


その誤差がどの程度のものであるか、実際に試してみればいい。

#include <stdio.h>
#include <windows.h>
int main(void)
{
 while (Sleep(1000), 1) puts("OnTime");
 return 0;
}

精度はミリ秒単位の話。
カレンダーのアプリケーションに、そこまでの精度は必要ないと思いますよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。

そうですね、よく考えるとそんなに精度は必要ないですね。

お礼日時:2007/05/19 11:28

OSがWindowsで言語がC、Win32を使うものと


仮定しますと

SetTimer関数を使用します

使用方法は以下のURLです
http://yokohama.cool.ne.jp/chokuto/advanced/func …
    • good
    • 1
この回答へのお礼

早速のご解答ありがとうございます。
ちょっと難しそうですね。

言語はC、OSはWinXPでした。

お礼日時:2007/05/18 10:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!