2015-01-04 3 views
0

다른 호출에 대해 다른 값을 반환하는 시간 함수를 찾고 있습니다. 나는 그것이 원하는 것만이 아니라는 것을 알기 위해서 LINUX에서 아래의 메소드를 시도했다. 그것은 다른 쓰레드로부터의 호출에 대해 같은 값을 리턴 할 수있다.다른 함수 호출에 대한 시간 함수 보증

long GetTickCount()   
    {   
     struct timespec now; 
     clock_gettime(MONOTONIC, &now); 
     return now.tv_sec * 1000000000LL + now.tv_nsec; 
    } 

Linux에서 다른 방법이 있습니까?

+0

첫 번째 발견은 검색해야합니다. 그리고 가장 많이받는 것은 단조로운 카운터입니다.이 카운터는 고유하게 만들기 위해 필요한 정보가 무엇이든간에 늘려야합니다. – Deduplicator

+0

'MONOTONIC '은 모든 호출마다 다른 값을 가져 오는 것을 보장하지 않습니다. 그것은 실제 타이밍 결정에 달려 있습니다. –

+0

정말로, 증상이 아닌 기본 문제를 해결하고 있습니까? 연동 카운터를 사용하지 않는 이유는 무엇입니까? –

답변

2

모든 시계의 세분성이 제한되어 연속 호출이 동일한 값을 반환 할 수 있습니다. 이 여러 스레드와 신뢰할 수있는 원하기 때문에

static long long previous_time = 0; 

long long get_strictly_monotonic_time() { 
    int rc; 
    struct timespec tp; 
    long long t; 
    rc = clock_gettime(CLOCK_MONOTONIC, &tp); 
    if(rc < 0) return -1; 
    t = tp.tv_sec * 1000000000LL + tp.tv_nsec; 
    /* Critical region */ 
    if(t <= previous_time) 
     t = previous_time + 1; 
    previous_time = t; 
    /* End of critical region */ 
    return t; 
} 

, 당신은 (글로벌 뮤텍스와 글로벌 카운터를 보호하기 위해와 지역을해야합니다 그것을 해결하기 위해, 당신은 글로벌 카운터를 사용해야합니다 위의 "중요 지역"주석).

관련 문제