clock_gettime 예제

수정된 문자열 반복 벤치마크 게시물을 살펴보고, 더 큰 경우 clock_gettime을 코드 성능에 사용하는 예제를 살펴볼 수 있습니다. int clock_getres(clockid_t clk_id, 구조형 시간 사양 *res); int clock_gettime(clockid_t clk_id, 구조체 타임스펙 *tp); int clock_settime(clockid_t clk_id, 구성 구조체 시간 사양 *tp); clock()의 해상도 문제에서 clock()에서 제공하는 타이머의 저해상도 문제를 제기한 후, 프로파일링 코드에 적합한 고해상도 타이머를 제공해야 하는 두 가지 함수를 더 언급하여 게시물을 종료했습니다. 이 게시물에서 나는 그들 중 하나, clock_gettime ()에 대해 설명합니다. clock_gettime()은 나노초 해상도로 몇 가지 유용한 타이머에 대한 액세스를 제공합니다. 첫째, 함수의 프로토타입은 다음과 같습니다: _POSIX_CPUTIME이 정의된 경우 구현은 지정된 프로세스의 CPU 시간 시계를 나타내는 clock_getcpuclockid()를 호출하여 얻은 클럭 ID 값을 지원합니다. 구현은 또한 clock_*() 또는 타이머_*() 함수 중 하나를 호출할 때 호출 프로세스의 CPU 시간 시계를 나타내는 특수 clockid_t 값 CLOCK_process_CPUTIME_ID를 지원해야 합니다. 이러한 클럭 아이디의 경우 clock_gettime()에서 반환되고 clock_settime()에 의해 지정된 값은 시계와 연결된 프로세스의 실행 시간을 나타냅니다. clock_settime()을 통해 CPU 시간 클럭 값을 변경하면 산발적인 서버 예약 정책의 동작에 영향을 주지 않습니다(예약 정책 참조). clock_gettime을 사용하려면 time.h를 포함하고 librt.a에 연결해야 합니다. gcc를 사용하는 경우 인수 목록에 -lrt를 추가하십시오. clock_gettime() 함수는 지정된 clock_id에 대한 현재 값 tp를 반환합니다. clock_getres, clock_gettime, clock_settime – clock_gettime 시스템 호출은 다음과 같은 사용법이 있습니다: clock_gettime 시스템 호출은 몇 가지 주요 변경 사항으로 gettimeofday 시스템 호출의 후속 기능입니다: 높은 정밀도와 기능 특정 시계를 요청합니다. 그것은 두 개의 필드를 포함하는 구조를 채웁니다: 에포크 이후 시간의 초 및 나노초 카운트 (00:00 1월 1970 UTC).

이는 마이크로초 필드가 이제 나노초 필드로 대체된다는 점을 제외하면 gettimeofday가 사용되는 구조형 시간값과 유사합니다. 예를 들어 클럭의 해상도가 1024Hz(1/1/1,024초)인 경우 결과 해상도는 976562.5나노초이며, 클럭_getres에서 976562로 보고됩니다. for 루프의 길이로 비트를 재생합니다. 당신이 볼 수 있듯이 clock_gettime 훨씬 더 정확한 결과 제공 하 고 너무 매우 짧은 처리 시간을 등록할 수 있습니다. 프로파일링 함수의 경우와 마찬가지로 이 함수는 프로그램에 약간의 오버헤드를 추가하므로 프로덕션 릴리스에서 전처리기 명령을 사용하여 프로파일링 코드를 사용하지 않도록 설정해야 합니다. 클럭은 시스템 전체(즉, 모든 프로세스에서 볼 수 있음) 또는 프로세스당(프로세스 내에서만 의미 있는 시간 측정)일 수 있습니다. 모든 구현은 에 정의된 CLOCK_REALTIME의 clock_id를 지원합니다.