[C/C++] 시간 처리하기

yjseo·2024년 10월 21일

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, &current_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를 반환하는 함수이다.

profile
저 뭐해먹고 살아요..🥺

0개의 댓글