표준 지정 std::chrono::system_clock
다음과 같이
23.17.7.1 클래스 system_clock [time.clock.system] 클래스 system_clock의
객체는 시스템 전체에서 실시간 시계 벽시계 시간을 나타낸다.
이것은 여러 가지 의미가 있습니다. 첫째,이 시계의 시간은 std::chrono::system_clock::to_time_t
및 std::chrono::system_clock::from_time_t
을 통해 time_t
시간으로 변환 할 수 있습니다. 시계는 일종의 물리적 시간을 나타냅니다. 둘째, 시계는 "시스템 전체"로 지정됩니다. 즉, 모든 프로세스가이 시계에서 동일한 time_point
값을 검색해야합니다.
실제로이 시계는 예를 들어 작업 표시 줄에서 볼 수 있듯이 일종의 시간을 검색하는 OS 특정 기능에 대한 호출로 구현되는 경우가 많음을 의미합니다.
이 시계가 is_steady
인 경우 지정되지 않았습니다. 즉,이 시계의 timepoints
은 항상 앞으로 나아갈 필요가 없습니다. 실제 시간대에 통화가 발생하더라도 이전 시간대를 얻을 수 있습니다. 예를 들어 사용자가 일부 OS 설정을 통해 시계를 조정 한 경우 이러한 현상이 발생할 수 있습니다.
당신은 무엇을 묘사하는 것에 가까운 것은 std::chrono::steady_clock
입니다 :
23.17.7.2 클래스 [time.clock.steady] 클래스 steady_clock의
객체는 결코 감소하지 않습니다에 대한 시계 time_point의 값 대표 steady_clock 실제 시간이 진행되고 time_point의 값이 실시간에 비례하여 일정한 속도로 증가함에 따라.
언급 한 두 가지 요구 사항이 있습니다. 첫째, 시계는 단조 로워 야하므로 시간은 절대로 "뒤로 돌릴 수 없다". 둘째, 시계가 안정적이므로이 시계의 모든 진드기는 동일한 양의 실제 시간을 가져야합니다.
주기 카운터와 같은 하드웨어 카운터로이 시계를 구현하는 것이 자연 스럽습니다. 그러나 조심하십시오 :이 시계는 시스템 전체가 될 필요는 없습니다. 이것은 값이며, 예를 들어. 다른 카운터가있는 다른 CPU가 있더라도 현재 실행중인 CPU에서 가져올 수 있습니다.
특정 구현을 염두에두고 있습니까? – chris
@chris 무슨 뜻인지 자세히 설명해 주시겠습니까? x86 대 팔 또는 코드 구현과 같은 구현을 의미합니까? – Greg
가장 주목할만한 것은 OS이기 때문에 크로노 라이브러리가 OS 호출에 위임하여 그 시점으로부터 시스템 시간을 얻는 것이 가능하기 때문입니다. 예를 들어 Windows에는'GetSystemTime'이 있습니다. 이 표준은 어떤 종류의 시스템이 그것을 구현할 수 있는지를 제한하기 때문에 세부 사항에 대해서는 거의 직접적으로 적용되지 않습니다. – chris