2008-10-14 5 views
4

시스템 클럭에 간섭하는 사용자가 복원력있는 방식으로 프로그램을 시작한 후 경과 시간 (월 클럭 시간)을 얻는 방법이 필요합니다.프로세스 시작 이후 경과 시간이

윈도우에서 비표준 clock() 구현은 트릭을하지 않습니다. 시작시 샘플링 된 시간과의 차이를 계산하여 작동하는 것처럼 보이므로 " 시계 손 다시 ".

UNIX에서 clock/getrusage는 시스템 시간을 참조하는 반면 gettimeofday와 같은 함수를 사용하면 시간 소인을 샘플링하는 것과 마찬가지로 windows에서 clock을 사용하는 것과 동일한 문제점이 있습니다.

저는 정밀도에별로 관심이 없습니다. 그리고 발생했을 때 시계 스큐에 대비하여 백그라운드에서 0.5 초의 해상도 타이머를 회전시켜 해킹했습니다. (샘플링 된 시간과 예상은 1 초를 초과합니다. 새로운 기준선에 예상되는 타이머를 사용합니다.)하지만 더 나은 방법이 있어야한다고 생각합니다.

답변

-1

네트워크에 연결되어있는 경우 언제든지 NTP 서버에서 시간을 가져올 수 있습니다. 이것은 분명히 로컬 시계에서 영향을받지 않습니다.

0

벽시계는 ()으로 계산할 수 있습니다.

-1

/proc/uptime on linux는 시스템 인터럽트에 의해 유지되는 시간의 변화에 ​​영향을받지 않는 시스템 가동 시간 (초)과 유휴 시간 (초)을 유지합니다. jiffies/HZ). 아마도 창문에 비슷한 것이 있습니까?

2

언제든지 어떤 종류의 타이머를 시작할 수 있습니다. 이 같은 루프를했을 리눅스 스레드 에서 예를 들어 : app_state_t이 원하는 응용 프로그램 구조

static void timer_thread(void * arg) 
{ 
     struct timespec delay; 
     unsigned int msecond_delay = ((app_state_t*)arg)->msecond_delay; 

     delay.tv_sec = 0; 
     delay.tv_nsec = msecond_delay * 1000000; 

     while(1) { 
       some_global_counter_increment(); 
       nanosleep(&delay, NULL); 
     } 
} 

는 변수를 저장했다. 변조를 방지하려면 아무도 스레드를 죽이지 않았는지 확인해야합니다.

1

POSIX의 경우 clock_gettime()CLOCK_MONOTONIC과 함께 사용하십시오.

관련 문제