2017-02-12 16 views
1

크로스 플랫폼 32 비트 임베디드 시스템 (Windows 및 Linux) 용 C++ 앱을 개발 중입니다. 필요한 기능 중 하나에 대해 밀리 초 단위의 시간차를 계산해야합니다. 첫째, 32 비트 시스템에서 획기적인 타임 스탬프가 제공하는 가장 큰 정밀도는 1 초입니다. 내가 건너 온 관련 답변의 대부분은 표준 : 시계 또는 표준의 사용과 같은 관련 중 64 비트입니다 :: 같은 크로노 :크로스 플랫폼 C++ 32 비트 시스템에서 시간차를 밀리 초 단위로 가져 오는 방법은 무엇입니까?

std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count(); 

또는

#include <sys/time.h> 

또는 GetSystemTime 함수를 사용하여 시스템 sprecific 창문에. 또한 poco 관련 시간 함수를 확인했지만 64 비트 변수를 기반으로합니다. 기존의 표준 또는 외부 C++ 라이브러리로이를 수행 할 수 있습니까? 아니면 다른 접근 방식을 따라야합니까?

+0

에포크 시간이 밀리 초 단위로 필요합니까? 아니면 두 시간 단위 사이에 밀리 초 단위로 차이가 필요합니까? – rustyx

+0

@RustyX 밀리 세컨드의 두 시간 지점 사이에 차이가 필요하지만 뭔가 빠뜨린 것이 아니라면 다른 시간대의 밀리 초 단위로 에포크 시간을 얻을 수 있다고 가정합니다. – dk13

+0

에포크 시간을 밀리 초 단위로 가져 오는 표준적인 휴대용 방법은 없습니다. 'chrono :: system_clock'은 종종 1 초의 정밀도를 가지고 있으며,'chrono :: high_resolution_clock'은 그 시대에 시작하지 않습니다. – rustyx

답변

4

여기 (밀리 초) 시대의 시간과 시차를 얻을 수있는 C++ (11)의 방법 (물론, std::literals는 C++ 14입니다하지만 당신은 것을 사용할 필요가 없습니다) :

#include <iostream> 
#include <chrono> 

using namespace std::literals; 

int main() 
{ 
    using Clock = std::chrono::system_clock; 
    auto point1 = Clock::now(); 
    int64_t epoch = point1.time_since_epoch()/1ms; 
    std::cout << "Time since epoch: " << epoch << std::endl; 
    auto point2 = Clock::now(); 
    std::cout << "Time difference in milliseconds: " << ((point2 - point1)/1ms) << std::endl; 
    std::cout << "Time difference in nanoseconds: " << ((point2 - point1)/1ns) << std::endl; 
} 

system_clock demo

Time since epoch: 1486930917677 
Time difference in milliseconds: 0 
Time difference in nanoseconds: 102000 
표준이 chrono::system_clock보다 높은 정밀도를 제공 할 수 chrono::high_resolution_clock을 가지고 높은 해상도 시점의 차이를

만의 시대는 종종 시스템 부팅시 시작되지 1-1-1970에

high_resolution_clock demo

Time since "epoch": 179272927 
Time difference in milliseconds: 0 
Time difference in nanoseconds: 74980 

그것은 2015+ Visual Studio에서 100ns의 정밀도를 가지고 2015 년 전에 high_resolution_clock 여전히 비주얼 스튜디오에 일초 정밀도를 가지고 있다는 사실을 숙지하고, 는에 적어도 1ms의 정밀도를 가져야한다 다른 플랫폼.

PS std::chrono은 32 비트 및 64 비트 시스템에서 정확히 동일하게 작동합니다.