2012-08-07 2 views
2

내 C++ 프로그램에서 뭔가를 수행하는 데 필요한 나노초의 수를 얻고 싶습니다. C++에서C++에서 이벤트를 시간 측정하는 방법?

long now = System.currentTimeMillis(); 
    // stuff 
    long diff = (System.currentTimeMillis() - now); 

가 어떻게 같은 행동을 할 것입니다 : 함수에 대한

객체 생성, 시간은, 우리의 라인을 따라 뭔가를 할 것 등 Java에서

일이 할까?

+0

time.h http://www.cplusplus.com/reference/clibrary/ctime/ – pyCthon

+0

나는 [this] (https://gist.github.com/3287323) 타이머 클래스를 조금 전에 썼다. 완벽하지만 도움이 될 수 있습니다. –

답변

5

++ 표준 C의 <chrono> 라이브러리가이 작업을 수행하는 가장 좋은 방법을 제공 Ideone.com execution time of a function callcppreference.com에서 샘플 코드를 참조하십시오.이 라이브러리는 표준을 제공합니다 , 유형 안전하고 일반적인 클럭 API

#include <chrono> 
#include <iostream> 

int main() { 
    using std::chrono::duration_cast; 
    using std::chrono::nanoseconds; 
    typedef std::chrono::high_resolution_clock clock; 

    auto start = clock::now(); 
    // stuff 
    auto end = clock::now(); 
    std::cout << duration_cast<nanoseconds>(end-start).count() << "ns\n"; 
} 

시계의 실제 해상도는 구현에 따라서 다릅니다하지만이 코드는 항상 가능한 한 정확하게 구현의 틱 기간 부여, 나노초 단위로 결과를 표시합니다.

+0

'error : 'std :: chrono'이 (가) 선언되지 않았습니다. 오류가 발생했습니다. 제발 무슨 일이 벌어지고 있을까요? – JAM

+0

@Jam C++ 11 이전의 표준 라이브러리 구현을 사용할 수도 있습니다. 어떤 컴파일러 버전과 표준 라이브러리를 사용하고 있습니까? – bames53

+0

'i686-apple-darwin11-llvm-g ++ - 4.2 (GCC) 4.2.1'은 표준 라이브러리의 버전을 모릅니다. 어떻게 찾을 수 있습니까? – JAM

0
+0

불행히도 그 중 누구도 올바른 대답을하지 못합니다. ''. – bames53

+0

"올바른 대답"이란 무엇입니까? 이것은 OP가 지원을 언급하지 않은 C++ 11 기능입니다. –

+0

Chrono는 표준이며, 시간 대기간 및 단위에 따라 달라 지므로 고해상도가 출시되면 새로운 API가 필요하지 않으므로 대부분의 경우 clock_gettime(), clock(), gettimeofday(), QueryPerformanceFrequency() 등을 사용하는 것이 실수로 간주됩니다. – bames53

1

clockclock_t을 살펴보십시오. 당신이 말한 해결책은 C++에서 네이티브 지원이 있다고 생각하지 않습니다. 의미있는 값을 얻으려면 여러 번 호출하거나 구성해야하거나 프로파일 러 (원하는 경우)를 사용해야합니다.

0

나는 오늘이 정확한 질문을했다. 그냥 타이머 기능을 SDL을 초기화하기하더라도,

uint32 a_time = SDL_GetTicks(); // Return uint32 count of milliseconds since SDL_Init was called 

을이 아마 당신에게 오버 헤드를 많이 제공하는 것입니다 있지만 : 순간에 내가 가지고있는 가장 좋은 방법은 SDL을 사용하고 호출하는 것입니다. (SDL_Init (SDL_INIT_TIMER)

희망이 당신을 도와줍니다 -.. 그것은 휴대용이기 때문에이 솔루션으로 이것에 대한 해결

2

C++ 11은 크로노 라이브러리를 사용하여 작업을 수행 할 수 있습니다에서 -

Class template std::chrono::duration represents a time interval. It consists of a count of ticks of type Rep and a tick period, where the tick period is a compile-time rational constant representing the number of seconds from one tick to the next.

현재 GCC 4.5.1에서 구현. (아직 VC++에서).

+0

''은 VS2012 RC에 있지만, high_resolution_clock의 눈금은 100ns라고 생각합니다. 다른 플랫폼에서는 더 좋을 것입니다. OS X의 libC++에는 ns 해상도가 있습니다. 나는 gcc 나 libstdC++에 대해 잘 모르겠다. – bames53

관련 문제