2010-06-09 3 views
4

두 통화 사이에 경과 된 시간 (밀리 초)을 계산하는 휴대용 (Windows &) 방법이 있습니까?C++에서 밀리 세컨드를 계산할 수있는 휴대용 방법은 무엇입니까?

기본적으로 클래스와 동일한 기능을 구현하고자합니다. .NET입니다. (이미 사용했던 사람들을 위해)

완벽한 세계에서 나는 boost::date_time을 사용했을 것입니다.하지만 존경을받는 바보 같은 규칙 때문에 여기서는 옵션이 아닙니다.

코드를 더 잘 읽는 사람들에게 이것은 내가 달성하고 싶은 것입니다. 휴대용 (세트) 나를 Timer를 구현하고 도움이 될 수 있습니다 기능 (들)이 있으면

Timer timer; 

timer.start(); 
// Some instructions here 
timer.stop(); 

// Print out the elapsed time 
std::cout << "Elapsed time: " << timer.milliseconds() << "ms" << std::endl; 

그래서, 그것은 무엇인가? 그러한 함수가 없다면,이 functionnality를 얻기 위해 어떤 Windows & 리눅스 API를 사용해야합니까? (#ifdef WINDOWS과 유사한 매크로 사용)

고마워요!

답변

4

Linux (일반적으로 POSIX)에서는 gettimeofday 함수를 사용할 수 있습니다.이 함수는 Epoch 이후의 마이크로 초 수를 반환합니다. Windows의 경우 시스템이 시작된 후 밀리 초를 리턴하는 GetTickCount 함수가 있습니다. (Time.h에서)

+0

'위해 clock_gettime (CLOCK_MONOTONIC ...) ', 경과 시간을 측정하는 것이 바람직하다 시스템 클럭. – caf

+0

'clock_gettime'은 mac에서 구현되지 않았기 때문에 일부 휴대용 응용 프로그램에서이를 사용할 수 없게 될 수도 있습니다. –

2

clock()마다 두 번째, 일반적으로 1000

+0

'clock()'은 벽시계 시간이 아닌 CPU 시간을 계산합니다. – caf

0

Windows에서 고성능 타이머를 사용, 그것은 doddle의 CLOCKS_PER_SEC 증가 값을 반환합니다.

이론적으로이 값은 문제의 CPU에 따라 시계 사이클 정확도까지 올라갈 수 있습니다.

+1

그러나 ereOn이 휴대용 솔루션을 요구하고 있습니다. 이것은 Windows 전용입니다. – munissor

+0

그런 기능이 없으면이 functionnality를 얻기 위해 어떤 Windows & Linux API를 사용해야합니까? (#ifdef WINDOWS와 유사한 매크로 사용) – Puppy

+0

HPT는 시스템마다 코어마다 다를 수 있으며, 스레드가 코어 간 전환을 끝내면 이러한 멀티 코어 CPU의 날에는 좋은 솔루션이 아닙니다. 토스트 : http://msdn.microsoft.com/en-us/library/ms644904(VS.85).aspx –

0

이것은의 Ptime 초 + 나노초 ptime(int sec,int nano)

와의 Ptime :: 마이크로는 POSIX의 시간을 마이크로 초에서 초/나노 쌍을 만들 시간을 나타내는 클래스는이 작업 (부스트 라이센스)에 대한 내 코드 입니다.

필요에 맞게 다시 작성하고 이러한 클래스를 작성하는 것은 매우 쉽습니다. 그것이 변경에 의해 영향을받지 않으므로

ptime ptime::now() 
{ 
    #ifndef BOOSTER_WIN_NATIVE 
    struct timeval tv; 
    gettimeofday(&tv,0); 
    return ptime(tv.tv_sec,tv.tv_usec * 1000); 
    #else 
    FILETIME ft; 
    GetSystemTimeAsFileTime(&ft); 
    unsigned long long tt = ft.dwHighDateTime; 
    tt <<=32; 
    tt |= ft.dwLowDateTime; 
    tt /=10; 
    tt -= 11644473600000000ULL; 
    return ptime(ptime::microseconds(tt)); 
    #endif 
} 

그리고 어떤 휴대용 C++이를위한 기능은 없다는 ...