본문 바로가기

카테고리 없음

[C++] 클럭 함수 clock() - 3초 동안 반복하기

void main() { clock_t t1, t2; int count = 0; t1 = clock(); for(;;) { cout << "기다리십시오. " << count++ << endl; t2 = clock(); if ((t2 - t1) > (3 * CLOCKS_PER_SEC))break; } cout << "끝났습니다." << endl; }

프로그램 실행화면


프로그래밍을 하다 가끔 초 단위를 count해야 할 때가 있다. 그럴 때 보통 Sleep()함수를 이용한다. Sleep()함수는 편하게 사용할 수 있지만 함수 이름 그대로 자고 있다. 아무런 일을 할 수 없다.


thread라는 녀석을 배워 여러 일을 동시에 처리한다면 모르겠지만 그건 나중에 일이고 지금은 아무런 일을 처리할 수 없다.


프로그램을 재우지 않고 일정 시간 동안 기다려야할 때 clock함수를 사용하면 된다. 윈도우 프로그램에서는 방금 설명한 프로그램을 재우지 않고 실행해야 할 경우가 드물다.


하지만 AVR, PIC, 8051등 마이크로프로세서 프로그램을 하다보면 다이나믹 제어를 하면서 delay()함수를 사용해야 하는데 이럴 경우 다이나믹 제어를 위해 delay함수를 수정해야 만 할 것이다.


아니면 timer interrupt를 사용하던지 말이다. 아무튼 내가 구현할 수 있는 방법이 많다는 것은 좋은 것이므로 clock()함수를 이용해서 for문에 잠시 가두어 둘 수 있다.


for문에 갇혀 있는 동안 이 for문 안에 원하는 동작을 넣어 주면 된다. 쉽게 말해서 버튼 입력이나 스위치 입력 등 쉬지 않아야 하는 부분을 넣어 준다는 말이다.


CLOCKS_PER_SEC 이것은 이름을 보고 눈치 챘겠지만 설명하자면 1초 동안 발생되는 클럭이라는 뜻이다. 각 cpu마다 속도 차이가 있기 때문에 이렇게 정의 된 것을 사용하면 좋다.


clock_t 라는 녀석이 보이는데 그냥 int형이라 생각하면 쉽게 이해될 것이다.