2011-12-23 3 views
0

나는 서버 프로그램을 만들었고, 'clock()'함수가 음수 값을 반환하고 서버가 추락 한 곳에서 두 번 이상 오류가 발생했습니다. Windows 32 비트 VPS에서 프로그램이 100 시간 이상 실행되었을 때 두 번 모두 발생했습니다.clock() 반환 값이 음수입니까?

가 여기에 내가 MAIN.CPP에있는 설정입니다 (해당 컷) : 아주 간단 그거야

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; 
    } 
} 

합니다. 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

관련 문제