
sleep() 함수를 쓰면 편하지만 정밀하지 않다.
시간을 정확하게 측정하는 코드를 작성해보았다.
#include <time.h>
#include <sys/time.h>
#include <unistd.h>
int nsec = 0;
int totalsec = 100;
timespec start_time;
timespec last_time;
void initStartTime()
{
clock_gettime(CLOCK_MONOTONIC, &start_time);
last_time = start_time;
}
bool isNsecElapsed()
{
bool iselapsed = false;
struct timespec current_time;
clock_gettime(CLOCK_MONOTONIC, ¤t_time);
long elapsed_sec = current_time.tv_sec - last_time.tv_sec;
long elapsed_nsec = current_time.tv_nsec - last_time.tv_nsec;
if (elapsed_sec >= nsec || (elapsed_sec == nsec && elapsed_nsec >= 0))
{
long start_elapsed_sec = current_time.tv_sec - start_time.tv_sec;
long start_elapsed_nsec = current_time.tv_nsec - start_time.tv_nsec;
if (start_elapsed_nsec < 0) // 나노초 처리
{
start_elapsed_sec--;
start_elapsed_nsec += 1000000000;
}
iselapsed = true;
last_time = current_time;
}
return iselapsed;
}
nsec 변수는 command line argument에서 받아온다.
bool isNsecElapsed()함수는 nsec 만큼 시간이 지나면 true를 반환하는 함수이다.