• ベストアンサー

秒数を数える(C言語)

プログラム実行時に時間を数え始めて、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です。よろしくおねがいします。

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

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

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

zunzunzunzunzun
質問者

お礼

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

その他の回答 (3)

回答No.4

No.1です。 エラーになってしまったようで、失礼いたしました。 (1) No.3の方のように、フラグを用いてみる。 (2) while(1)の前でclock()を求め、tekitou()の中ではその値を用いる。 (3) tekitou()の中でループさせて、そのループの前で「start = clock();」を実行する などの対処法は如何でしょうか。

zunzunzunzunzun
質問者

お礼

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

  • butarou
  • ベストアンサー率24% (7/29)
回答No.2

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

zunzunzunzunzun
質問者

補足

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

回答No.1

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

zunzunzunzunzun
質問者

補足

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

関連するQ&A