[C/C++] Sleep 없이 1초 기다리기

LeeWlWL·2024년 7월 21일

개발

목록 보기
2/2

<Windows.h> 랑 Sleep(1000) 조합 말고,
1초를 기다릴 수 있는 방법이 뭘까?

  • 처음에는 <time.h>랑 time(NULL)이라는 초단위로 1초 세려고 했는데, clock이라는 ms단위를 써보니까 실제로 찍히는건 0.01s..0.9s... 뭐 다양한데 1초는 아님.
int main(){

    clock_t start = clock(); 
    int savetime = time(NULL);

    while(time(NULL)-savetime < 1){
        //반복
    }

    clock_t end = clock(); 
    double result = (double)(end - start);

    cout << result / CLOCKS_PER_SEC << endl;

    return 0;
}
  • 그래서 clock을 기준으로 코드를 다시 작성할 수 있다 (이러면 ms단위로 1초 세줌)
int main(){

    clock_t start = clock();
    int savetime = time(NULL);

    while((clock()-start)/CLOCKS_PER_SEC < 1){
        //반복
    }

    clock_t end = clock(); 
    double result = (double)(end - start);

    cout << result / CLOCKS_PER_SEC << endl;

    return 0;
}

  • 만약 time.h도 인클루드 못하는 상황이라면? 진짜로 while만 가지고 돌려야한다면,
    이정도 값이 2째자리까지 반올림했을 때 1.00s 가 98% 정도 확률로 나온다!
int main(){

    clock_t start = clock();
    long long int i = 0;

    while(i < 1660000000){
        //반복
        i++; 
    }

    clock_t end = clock(); 
    double result = (double)(end - start);

    cout << result / CLOCKS_PER_SEC << endl;

    return 0;
}
profile
진화중이에요

0개의 댓글