2013-05-09 2 views
0

시스템의 밀리 초 시간을 얻고 싶습니다. (실시간인지 여부는 신경 쓰지 않습니다. 가능한 한 정확해야합니다). 이것이 좋은 방법입니까?Linux 및 Windows 밀리 초 시간

#ifdef WIN32 
unsigned long long freq; 
unsigned long long get_ms_time() { 
    LARGE_INTEGER t; 
    QueryPerformanceCounter(&t); 
    return t.QuadPart/freq; 
} 
#else 
unsigned long long get_ms_time() { 
    struct timespec t; 
    clock_gettime(CLOCK_MONOTONIC, &t); 
    return t.tv_sec * 1000 + t.tv_nsec/1000000; 
} 
#endif 

어떻게이 값을 부호있는 int로 바꿀 수 있습니까? 나는 이것을 시도하고 이런 식의 음수 값을 얻는다. (리눅스에서 나는 윈도우에 대해 모른다.)

~ start 
-2083002438 
~ 15 seconds after.. 
-2082987440 
~ 15 seconds after.. 
-2082972441 

나는 이것을 좋아할 것이다. ~ 시작 X 15 ~ 초 후에 .. X + 14,998 15 ~ 초 후에 .. X + X는 양수입니다

29997. (내가 원하는 출력 긍정적 증가)

+0

왜 당신이 우리 코드 표시되지 않습니다? – Nick

+0

표시되는 코드는 정상적으로 보입니다. 따라서 잘못된 값을 인쇄하고 있거나 다른 잘못된 작업을하는 것으로 의심됩니다. –

+0

int x = (int) get_ms_time(); cout << x; – dan

답변

0

내 코드에서 같은 것을 할 ...

timespec specStart, specStop; 

// Get start time (UNIX timestamp) in seconds... 
clock_gettime(CLOCK_MONOTONIC_RAW, &startTime); 

int startTimeInt = startTime.tv_sec; 
std::cout << "start time : " << startTimeInt << std::endl; 

... 
// Get stop time (UNIX timestamp) in seconds... 
clock_gettime(CLOCK_MONOTONIC_RAW, &stopTime); 

int stopTimeInt = stopTime.tv_sec; 
std::cout << "stop time : " << stopTimeInt << std::endl; 

// Get time diff from stop time to start time 
unsigned long long timeStart = specStart.tv_sec * 1000000000 + specStart.tv_nsec; 
unsigned long long timeStop = specStop.tv_sec * 1000000000 + specStop.tv_nsec; 
unsigned long long timeDelta = timeStio - timeStart; // Time diff in nanoseconds. 

int microSec = timeDelate/1000; 
int mSec = timeDelta/1000000; 
int sec = timeDelta/1000000000; 

std::cout << "time diff : " << std::endl 
    << sec << " s" << std::endl 
    << msec << " ms" << std::endl 
    << microSec << " µs" << std::endl 
    << timeDelta << " ns" << std::endl;