2011-07-28 4 views
1
내가 setitimer와 짧은 시간 제한을 설정 한 다음 리눅스 2.6.26 시스템 (데비안 5.0.5) ( getitimer 또는 다른 setitimer로) 설정 값을 조회

, 나는 내가 설정보다 다시 높은 값을 얻을 :setitimer on linux 반올림?

#include <sys/time.h> 
#include <iostream> 

int main() { 
    struct itimerval wanted, got; 

    wanted.it_value.tv_sec  = 0; 
    wanted.it_value.tv_usec = 7000; 
    wanted.it_interval.tv_sec = 0; 
    wanted.it_interval.tv_usec = 0; 

    setitimer(ITIMER_VIRTUAL, &wanted, NULL); 
    getitimer(ITIMER_VIRTUAL, &got); 

    std::cerr << "we said: " << wanted.it_value.tv_usec << "\n" 
      << "linux set: " << got.it_value.tv_usec << std::endl; 

    return 0; 
} 

반환 :

we said: 7000 
linux set: 12000 

우리는 약간의 계산 후에 남아있는 것으로보고 시간을 사용하기 때문에 이것은, 문제가, 그리고 그들은 너무, 너무 큽니다.

이 문제는 알려진 문제입니까? (검색 기능이 작동하지 않습니다.) 누구든지 좋은 해결 방법이 있습니까?

답변

1

POSIX documentation of the setitimer function에서

구현 타이머 값의 단위에 대한 제한을 배치 할 수 메모가있다. 요청 된 타이머 값이 구현 지원하는 것보다 더 정밀한 세분화가 필요한 경우 각 간격 타이머를 들어, 실제 타이머 값은

시스템의 단위 1000 (마이크로 초)보다 높은 것으로 보인다 다음 지원되는 값으로 반올림된다 (6000 usec 인 것 같습니다) 타이머 값은 반올림됩니다. 타이머 정밀도는 그러한 정밀도가 필요한 경우 문제가됩니다.