링크 ux 의 time 처리
Wall time (real time), Process time, Monotonic time.
Wall time, 즉 rtc 시계.
Process time, 프로 세 스 실행 시간.
Monotonic time, 즉 시스템 이 boot 이후 현재 시간 까지 입 니 다.
시간 을 나타 내 는 데이터 구조:
typedef __timer_t timer_t;
struct timeval
{
__time_t tv_sec; /* Seconds. */
__suseconds_t tv_usec; /* Microseconds. */
};
struct timespec
{
__time_t tv_sec; /* Seconds. */
long int tv_nsec; /* Nanoseconds. */
};
그 중 세 번 째 가 가장 좋다. 왜냐하면 그 는 나 초 까지 정확 할 수 있 기 때문이다.
위 에서 표시 할 수 있 는 것 은 초 이다. 우 리 는 때때로 더욱 직관 적 인 표현 이 필요 하기 때문에 아래 의 데이터 구조 가 있다.
struct tm
{
int tm_sec; /* Seconds. [0-60] (1 leap second) */
int tm_min; /* Minutes. [0-59] */
int tm_hour; /* Hours. [0-23] */
int tm_mday; /* Day. [1-31] */
int tm_mon; /* Month. [0-11] */
int tm_year; /* Year - 1900. */
int tm_wday; /* Day of week. [0-6] */
int tm_yday; /* Days in year.[0-365] */
int tm_isdst; /* DST. [-1/0/1]*/
#ifdef __USE_BSD
long int tm_gmtoff; /* Seconds east of UTC. */
__const char *tm_zone; /* Timezone abbreviation. */
#else
long int __tm_gmtoff; /* Seconds east of UTC. */
__const char *__tm_zone; /* Timezone abbreviation. */
#endif
};
clock_getres 이 함 수 는 서로 다른 시계의 정밀도, 즉 시계 간격 을 얻 습 니 다.
int clock_getres(clockid_t clk_id, struct timespec *res);
#include <stdio.h>
#include <time.h>
int main()
{
clockid_t clocks[]= {
CLOCK_REALTIME,
CLOCK_MONOTONIC,
CLOCK_PROCESS_CPUTIME_ID,
CLOCK_THREAD_CPUTIME_ID,
(clockid_t) -1,
};
int i;
for(i=0;clocks[i] != (clockid_t) -1;i++)
{
struct timespec res;
int ret;
ret = clock_getres(clocks[i],&res);
if(ret)
perror("clock_getres");
else
printf("clock = [%d],sec = [%ld],nsec = [%ld]
",clocks[i],res.tv_sec,res.tv_nsec);
}
return 1;
}
내 amd cpu 에서 출력 결 과 는 다음 과 같 습 니 다:
clock = [0],sec = [0],nsec = [4000250]
clock = [1],sec = [0],nsec = [4000250]
clock = [2],sec = [0],nsec = [1]
clock = [3],sec = [0],nsec = [1]
그 중에서 4000250 은 마침 0.04 초 이다. 즉, x86 구조의 시스템 시계 주파 수 는 250 hz 이다.
현재 시간 을 가 져 오 는 함수:
extern time_t time (time_t *__timer) __THROW;
int gettimeofday(struct timeval *tv, struct timezone *tz);
int clock_gettime(clockid_t clk_id, struct timespec *tp);
#include <stdio.h>
#include <time.h>
int main()
{
clockid_t clocks[]= {
CLOCK_REALTIME,
CLOCK_MONOTONIC,
CLOCK_PROCESS_CPUTIME_ID,
CLOCK_THREAD_CPUTIME_ID,
(clockid_t) -1,
};
int i;
for(i=0;clocks[i] != (clockid_t) -1;i++)
{
struct timespec res;
int ret;
ret = clock_gettime(clocks[i],&res);
if(ret)
perror("clock_getres");
else
printf("clock = [%d],sec = [%ld],nsec = [%ld]
",clocks[i],res.tv_sec,res.tv_nsec);
}
return 1;
}
결 과 를 통 해 4 개의 시계의 다른 의 미 를 알 수 있다.예 를 들 면 CLOCKREALTime 에서 볼 수 있 는 결 과 는 1970 년 이후 거 친 초 수 였 다.
설정 시간의 함수 와 get 차이 가 많 지 않 습 니 다:
int stime(time_t *t);
int settimeofday(const struct timeval *tv, const struct timezone *tz);
int clock_settime(clockid_t clk_id, const struct timespec *tp);
대부분의 시스템 에서 시 계 를 설정 하고 CLOCK 만 설정 할 수 있 습 니 다.REALTIME。。
여기에 더 높 은 함수 가 하나 더 있다.
#include <sys/timex.h>
int adjtimex(struct timex *buf);
이 함 수 는 커 널 시 계 를 동기 화 하 는 데 쓰 인 다.구체 적 인 용법 은 man 을 보 러 갈 수 있다.
sleep 의 4 개 함수:
sleep
usleep
int nanosleep(const struct timespec *req, struct timespec *rem);
long sys_clock_nanosleep (clockid_t which_clock, int flags, const struct timespec *rqtp, struct timespec *rmtp);
sleep 과 usleep 는 차이 가 크 지 않 습 니 다. 하 나 는 초 이 고 하 나 는 밀리초 입 니 다.
nanosleep 와 그들의 차 이 는 나 초 를 사용 하 는 것 이 며, 그 는 신호 로 이 루어 지 는 것 이 아니 므 로, sleep 과 usleep 를 사용 하지 않 는 것 을 권장 합 니 다.
마지막 함 수 는 우리 가 선택 한 시 계 를 선택 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception in thread main java.lang. NoClassDefFoundError 오류 해결 방법즉,/home/hadoop/jarfile) 시스템은 Hello World 패키지 아래의class라는 클래스 파일을 실행하고 있다고 오인하여 시스템의 CLASSPATH 아래 (일반적으로 현재 디렉터리를 포함) Hell...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.