usleep
#include <unistd.h>
int usleep(unsigned int microseconds);
/*
성공시 0을 반환하고, 그 외에는 -1을 반환함과 동시에 전역변수 errno에 해당 오류값을 세팅한다.
*/
usleep
함수는 인자로 받은 마이크로초(100만분의 1초)가 경과하거나 프로세스에 신호가 전달될 때까지 프로세스의 실행을 일시 중단한다. sleep
함수는 프로세스를 중지하는 단위가 마이크로초가 아닌 초 단위라는 점만 usleep
과 다를 뿐 프로세스를 잠시 멈추는 기능은 동일하다.
usleep(1000000)
과 sleep(1)
는 유사한 기능 수행!
gettimeofday
#include <sys/time.h>
int gettimeofday(struct timeval *tp, struct timezone *tzp);
/*
성공시 0을 반환하고, 그 외에는 -1을 반환함과 동시에 전역변수 errno에 해당 오류값을 세팅한다.
*/
struct timeval {
long tv_sec; /* 1970년 1월 1일부터의 초수 */
long tv_usec; /* 및 마이크로 세컨드수 */
};
struct timezone {
int tz_minuteswest; /* 그리니지로부터 서방향에의 편차 */
int tz_dsttime; /* 서머타임 보정의 타입 */
};
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
int main(int argc, char **argv)
{
struct timeval start_time;
struct timeval end_time;
long diff_sec;
long diff_usec;
double diff_time;
gettimeofday(&start_time, 0); // usleep 전 시작 시간 저장
usleep(1500000); // 1.5초간 프로세스 중지
gettimeofday(&end_time, 0); // usleep 후 시간 저장
diff_sec = end_time.tv_sec - start_time.tv_sec; // 초단위
diff_usec = end_time.tv_usec - start_time.tv_usec; // 마이크로초 단위
diff_time = diff_sec + ((double)diff_usec / 1000000); // 총 초가 흘렀는지 계산
printf("diff_sec : %lu\n", diff_sec);
printf("diff_usec : %lu\n", diff_usec);
printf("diff_time : %f\n", diff_time);
}
diff_sec : 1
diff_usec : 505151
diff_time : 1.505151