728x90
파일은 요아래에..
#include <stdio.h> #include <time.h> /* Needed for struct timespec */ int nsleep(long miliseconds) { struct timespec req, rem; if(miliseconds > 999) { req.tv_sec = (int)(miliseconds / 1000); /* Must be Non-Negative */ req.tv_nsec = (miliseconds - ((long)req.tv_sec * 1000)) * 1000000; /* Must be in range of 0 to 999999999 */ } else { req.tv_sec = 0; /* Must be Non-Negative */ req.tv_nsec = miliseconds * 1000000; /* Must be in range of 0 to 999999999 */ } return nanosleep(&req , &rem); } int main(int argc, char **argv, char **arge) { struct timespec tps, tpe; //int ret = nsleep(1000); while(1){ if ((clock_gettime(CLOCK_REALTIME, &tps) != 0) || (clock_gettime(CLOCK_REALTIME, &tpe) != 0)) { perror("clock_gettime"); return -1; } //printf("sleep result %d\n",ret); printf("[%lu.%lu] %lu ns\n", tps.tv_sec, tps.tv_nsec, tpe.tv_nsec-tps.tv_nsec); } return 0; }
자 코드를 분석해보자. 사실상 clock_gettime 으로 접근가능한 실행시간 (Elapsed Time) 으로 접근하면 위의 스크린샷처럼 CPU에 의존성을 띄며 정확한 Nano Second 단위로 접근하여 Command 를 날리는 것이 불가능하다.
만약 핵융합과 핵분열 같이 정확한 타이밍을 필요로하는 문제가 있다면 어떻게 해야할까? 바로 고전시대의 라이브러리가 우리를 반겨준다. 다음 포스팅에서 살펴보자.
'LINUX' 카테고리의 다른 글
How to get high precision nano second delay in linux III (0) | 2019.03.04 |
---|---|
How to get high precision nano second delay in linux II (0) | 2019.03.04 |
How To Install Krita On Linux (0) | 2019.03.04 |
How to install Google Chrome Browser on Kali Linux (0) | 2019.03.03 |
How to measure time in milliseconds using ANSI C (0) | 2019.03.03 |