2012-04-04 4 views
0

時間に基づいてループ関数を作成しようとしています。反復処理後、60秒ごとに60秒経過して印刷されます。しかし、このコードの結果、私は実際に私が見ても1分もまだ表示されません "60秒が経過したカップルになります。 私は以下を試みたが、私はこの情報を私に示すことを期待していますが、 )繰り返しの行のカップル。後で..)difftime forループパラメータを使用

誰もこの問題で助けることができますか?でも一秒が経過する前に

#include <stdio.h> 
#include <time.h> 

int main() 
{ 
time_t start,stop; 
start = time(NULL); 
time(&start); 
int iteration, i; 
    for (iteration = 1; iteration <= 500; iteration++) { 
      for (i = 0; i <= 50; i++) { 
        printf("looping while waiting 60 second..\n"); 

      } 
      stop = time(NULL); 
      int diff = difftime(start, stop); 
      if (diff % 60 == 0) { 
        printf("60 second passed..");} 
      } 

    return 1; 
} 
+2

にBTW - これは「ビジー・ウェイティング」(http://en.wikipedia.org/wiki/Busy_waiting)の例であり、一般的には避けることができない場合、貧困対策とみなされています。お使いのOSは、指定された時間(例えばsleep(3))の間、一時停止する手段を提供する必要があります。 – dmckee

答えて

2

difftime、次のコードは、おそらく複数回実行されています、ありがとうございました。その結果、difftimeは暗黙のキャストによって0に切り捨てられる値<1を返します。そしてもちろん0 % 60 == 0

EDIT:

start = time(NULL); 
for(; /* some condition that takes forever to meet */;) { 
    // do stuff that apparently takes forever. 
    stop = time(NULL); 
    double diff = difftime(stop, start); 
    if (diff >= 60) { 
     printf("60 seconds passed..."); 
     start = time(NULL); 
    } 
} 

はまた、あなたのコード例では、startstopdifftimeへの呼び出しに裏返されるべきであることに注意してください:あなたは何かを検討するかもしれない

+0

この発言に感謝します。私はそれを2倍に変更しようとしましたが、実際に%は整数だけを比較することができます(上記のような同じ問題か?) – xambo

+1

問題は実際にはint型に強制されているわけではありません。 1秒に数回起こる。したがって、実際にこのコードが1分以上実行された場合(これは非常に疑わしい)、分単位(0を含む)に達するたびに、メッセージが数回吐き出されます。 – jpm

+0

私は大きな数字に向かって "反復"を後で変更します。今のところ、何か他のことをする前に機能が働いているかどうかをチェックするという基本的な考えを得る必要があります(睡眠なし) – xambo

2

difftimeはあなたが60秒待つしたい場合は、関数を使用することを検討すべきである0に等しい可能性が非常に高いです:

  • usleepのlinux
  • sleep上のウィンドウ
+0

ゴムルカ:はい、私は睡眠を知っています()。しかし事は私が後でいくつかのものをしなければならないことです、それは睡眠に問題を引き起こす可能性があります。短くするには、60秒ごとに何かを印刷して、ループのパラメータを変更するだけです。私はdifftimeが役立つと思っていました。いいえ? – xambo

+1

さて、私はそれを知らなかった。条件を 'diff> 0 && diff%60 == 0'に変更しても、この問題の答えがわからない場合は、/。 –

関連する問題