プロが教えるわが家の防犯対策術!

プログラム実行時に時間を数え始めて、100秒経過したらまた最初からプログラムを実行しようと考えています。(tcpdumpみたいなもの)
まず、秒数を数えて出力するプログラムを作ってみたのですが、実行しても0.000000と出てしまい、数えることが出来ませんでした。
(例)
#include<stdio.h>
#include<time.h>

void tekitou();

int main()
{
while(1) { /*無限ループ*/
tekitou();
}
return 0;
}
void tekitou()
{
static time_t start;
time_t last;
start = clock();
last = clock();
printf("%f\n", (double)(last - start)/CLOCKS_PER_SEC);
}

OSはLinuxでコンパイラはgccです。よろしくおねがいします。

A 回答 (4件)

> time_t last;


> start = clock();
の部分を
< time_t last;
< static int first=1;
< if (first) {
< start = clock();
< first=0;
< }
のようにしてみましょう。
これによって初めてtekitouを呼び出したときにだけstartが更新されるようになります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。直してやってみたところ、ちゃんと時間を計測できました。ただ、なぜか時間が4倍ぐらいの早さで表示されてしまいましたが…

お礼日時:2006/02/02 21:49

No.1です。


エラーになってしまったようで、失礼いたしました。

(1) No.3の方のように、フラグを用いてみる。
(2) while(1)の前でclock()を求め、tekitou()の中ではその値を用いる。
(3) tekitou()の中でループさせて、そのループの前で「start = clock();」を実行する

などの対処法は如何でしょうか。
    • good
    • 0
この回答へのお礼

上記の対処方を試したところ、上手く時間を表示できました。やはり、時間が早く表示されてしまいましたが…。
そこはもうちょっと調べて、解決したいとおもいます。ありがとうございました。

お礼日時:2006/02/02 21:57

>start = clock();


>last = clock();

startとlastの間が短すぎて、差が0なんだとおもいます。
間に何かの処理を入れてみてはどうでしょうか。
(waitや、適当なファイルのOpen/Closeなど)

この回答への補足

回答ありがとうございます。無限ループなので、staticでstartを固定してやれば、差が出て来ると思ったのですが…
むりなんでしょうか?

補足日時:2006/02/02 21:27
    • good
    • 0

tekitou()の中にある、


 start = clock();
でstartが上書きされるからではないでしょうか。
startの宣言を
 static time_t start = clock();
に変えてstartへの代入を削除したら如何でしょうか。

この回答への補足

さっそくの回答ありがとうございます。
試してみたのですが、コンパイル時に「初期化子の要素が定数ではありません」とエラーが出てしまいました。

補足日時:2006/02/02 21:24
    • good
    • 0

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