2011-12-23 19 views
0

私はサーバープログラムを作成しましたが、 'clock()'関数が負の値を返した(そしてサーバーがクラッシュした)ところで、何らかのエラーが2回発生しました。プログラムが100時間以上実行されたときに、Windows 32ビットVPSで両方の時間に発生しました。clock()は負の値を返しますか?

while (1) { 
    Sleep(STEP); 

      //execute main code like connection handling, AI, etc. 

    //check for clock error 
    if (clock() < 0) { 
     //error saved here 

       //close server 
     return 0; 
    } 
} 

、かなりシンプルです:

ここで私は(適切な場合にカット)main.cppにして持っている設定です。 clock()はプログラムの残りの部分で広範囲に使用されているので、このように不具合が発生すると多くの問題が発生します。

私は、なぜそれが負の値を返すのだろうと思います、どうすれば修正できますか?

ありがとうございました。

答えて

4

Microsoft's documentationによると、「経過時間が利用できない」場合は-1を返すことができます。残念ながら、彼らは時間がどのように利用できないかを説明していません。

clock_tの定義は、32ビットの符号付き値であるlongです。オーバーフローする前に2 ** 31を保持できます。 CLOCKS_PER_SECONDの値は1000なので、596時間は良いはずです。

+0

これも私が見つけたものです。 – Edwin

+0

プログラムは596時間実行されている可能性があります。正直なところ、一度にどれくらいの時間が経過したのか分かりませんでした。もしそうなら、それは問題かもしれません。 clock()が-1を返しても、clock_tを0にリセットできますか? – Matthew

+0

C99によると、「使用されたプロセッサ時間が使用できない場合、またはその値**を表すことができない場合**」関数 は値(clock_t)( - 1)を返します。 – fefe

関連する問題