こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

1秒毎に1カウントアップ

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

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

投稿日時 - 2007-05-18 09:38:33

QNo.3009559

すぐに回答ほしいです

質問者が選んだベストアンサー

OSがWindowsで言語がC、Win32を使うものと
仮定しますと

SetTimer関数を使用します

使用方法は以下のURLです
http://yokohama.cool.ne.jp/chokuto/advanced/function/SetTimer.html

投稿日時 - 2007-05-18 10:43:20

お礼

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

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

投稿日時 - 2007-05-18 10:49:09

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

1秒たったらカウントアップする考え方では、ほかのアプリケーションがCPUを一時的に占有してしまった場合などに2~10秒くらいカウントが
ストップしてしまうことになります。
100ミリ秒ごとに現在時刻をチェックして、前回チェックした値と今回の値の差をとり、その秒数ぶんだけカウントアップさせるのはどうでしょうか。

投稿日時 - 2007-05-19 01:42:21

お礼

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

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

投稿日時 - 2007-05-19 11:33:50

ANo.3

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

投稿日時 - 2007-05-18 18:02:10

お礼

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

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

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

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

投稿日時 - 2007-05-19 11:32:58

ANo.2

>>sleep関数を使う事でOKでしょうか?
その誤差がどの程度のものであるか、実際に試してみればいい。

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

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

投稿日時 - 2007-05-18 12:38:34

お礼

ありがとうございます。

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

投稿日時 - 2007-05-19 11:28:09

あなたにオススメの質問