2013-11-04 2 views
1

Windows C++ 기능을 휴대용으로 변환하려고합니다. 함수의 목적은 초 단위로 참조 cpu ​​시간을 얻는 것입니다. Windows 기능은 을 사용하려고 했으므로 QueryPerformanceCounterQueryPerformanceFrequency을 사용합니다. 그러나 어떻게 작동하는지 이해하지 못합니다.시간 받기 C++

std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now(); 
std::cout << "Hello World\n"; 
std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); 
float a = std::chrono::duration_cast<std::chrono::seconds>(end - start).count(); 

: (그것은 그 인쇄에 "Hello World"가 소요되는 시간을 반환) 나는 다음과 같은 코드가 작동 한 high_resolution_clock

double GetSeconds(void) 
{ 
    double sec; 
    LARGE_INTEGER Frequency, PerformanceCount; 

    QueryPerformanceFrequency(&Frequency); 
    QueryPerformanceCounter(&PerformanceCount); 

    sec = (double)PerformanceCount.QuadPart /(double)Frequency.QuadPart; 

    return(sec); 
} 

: 나는 이미

기능은 다음이다 하지만 다음 라인이 작동하지 않는 이유를 모르겠습니다. (단지 시작 시점을 얻고 싶습니다.)

float a = std::chrono::duration_cast<std::chrono::seconds>(start).count();  
start기간 아니기 때문에

당신의 도움이

답변

4

주셔서 감사합니다, 그것은 시점입니다. 또한 std::chrono::steady_clock은 벽시계와 관련이 없으므로 자체의 현재 값을 얻는다고해도 그다지 알려주지 않습니다.이 카운터는 꾸준히 계산됩니다.

+2

+1. 자세한 내용은 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2661.htm을 참조하십시오. –

+0

Joachim Pileborg @ Howard-Hinnant 답변 해 주셔서 감사합니다. 그러나 _duration_ 또는 * time_point *를 사용하여 현재 실행 시간을 얻는 방법을 이해할 수 없습니다. –

+1

@ jl.da 실행 시간은'start'와'end' 사이의 지속 시간입니다. 이러한 포인트 중 벽시계 * (시스템 시간)를 얻으려면'system_clock'과''to_time_t' (http://en.cppreference.com/w/cpp/)를 사용해야합니다. chrono/system_clock/to_time_t) 또는 유사합니다. –