Sunday, August 26, 2007
C언어, 타이머 Timer 만들기 소스; 스톱워치 Stopwatch
C언어에서 간단한 타이머를 만드는 소스입니다. 사용자가 아무 키나 누를 때까지의 경과 시간을 측정하는 것입니다. 즉, "스톱와치"와 비슷합니다.
소스 파일명: example.cpp
(비주얼C/C++ 2005나 그 이상의 컴파일러에서만 컴파일됩니다. 비주얼C/C++ 2003 이나 gcc에서는 소스를 수정해야 합니다.)
위의 소스에서 sprintf_s 라는 함수는 sprintf 의 보안 강화 버전입니다. 비주얼C 2005나 그 이상의 컴파일러에서만 사용 가능합니다. s_sprintf 가 아니라 sprintf_s 입니다.
컴파일 및 실행 결과 화면:
맨 마지막의 24:00:05 라는 결과는 컴퓨터 시계를 하루 앞으로 당겨서 강제로 출력한 결과입니다.
▶▶ C언어] 현재 날짜/시간/년월일,시분초 구하기 함수(오늘 날짜 시간): Current Date, Time
컵라면 타이머 (온라인):
▶▶ 컵라면 타이머; 인터넷 요리용 타이머, 모래시계 Cooking Timer
스톱워치 (온라인 버전 스톱와치):
▶▶ 스톱워치, 초시계, 온라인 스톱와치, 100분의 1초 Stopwatch
C에서 Timer 구현, 경과 시간 측정
소스 파일명: example.cpp
(비주얼C/C++ 2005나 그 이상의 컴파일러에서만 컴파일됩니다. 비주얼C/C++ 2003 이나 gcc에서는 소스를 수정해야 합니다.)
#include <stdio.h>
#include <conio.h> // _getch()
#include <time.h> // time()
void stopwatch(int onOff);
void secToHHMMSS(int secs, char* s, size_t size);
char timerBuffer[8 + 1]; // 06:17:20 등의 경과 시간 문자열이 저장될 버퍼 정의
int main(void) {
stopwatch(1); // 1을 인수로 넣으면 타이머가 켜짐
puts("타이머 ON! 아무키나 누르면 종료");
// 유저가 아무 키나 누를 때까지 무한정 대기
_getch(); // _getch() 는 getch() 의 보안 강화 버전
stopwatch(0); // 0을 넣으면 타이머가 꺼지고 시간 문자열을 버퍼에 설정
printf("타이머 OFF! 경과 시간은: [%s]\n", timerBuffer);
return 0;
}
void stopwatch(int onOff) {
static int oldTime; // stopwatch 함수가 종료되어도 값을 기억하는 "정적 지역 변수"
if (onOff == 1) { // 타이머 켜기
oldTime = (int) time(NULL);
}
if (onOff == 0) { // 타이머 끄고, 시분초를 timerBuffer 에 저장
secToHHMMSS(
(int) time(NULL) - oldTime,
timerBuffer,
sizeof(timerBuffer)
);
}
}
void secToHHMMSS(int secs, char* s, size_t size) { // 정수로 된 초(sec)를 입력 받아, "06:17:20" 등의 형식의 문자열로 시분초를 배열에 저장
int hour, min, sec;
sec = secs % 60;
min = secs / 60 % 60;
hour = secs / 3600;
sprintf_s(s, size, "%02d:%02d:%02d", hour, min, sec);
}
#include <conio.h> // _getch()
#include <time.h> // time()
void stopwatch(int onOff);
void secToHHMMSS(int secs, char* s, size_t size);
char timerBuffer[8 + 1]; // 06:17:20 등의 경과 시간 문자열이 저장될 버퍼 정의
int main(void) {
stopwatch(1); // 1을 인수로 넣으면 타이머가 켜짐
puts("타이머 ON! 아무키나 누르면 종료");
// 유저가 아무 키나 누를 때까지 무한정 대기
_getch(); // _getch() 는 getch() 의 보안 강화 버전
stopwatch(0); // 0을 넣으면 타이머가 꺼지고 시간 문자열을 버퍼에 설정
printf("타이머 OFF! 경과 시간은: [%s]\n", timerBuffer);
return 0;
}
void stopwatch(int onOff) {
static int oldTime; // stopwatch 함수가 종료되어도 값을 기억하는 "정적 지역 변수"
if (onOff == 1) { // 타이머 켜기
oldTime = (int) time(NULL);
}
if (onOff == 0) { // 타이머 끄고, 시분초를 timerBuffer 에 저장
secToHHMMSS(
(int) time(NULL) - oldTime,
timerBuffer,
sizeof(timerBuffer)
);
}
}
void secToHHMMSS(int secs, char* s, size_t size) { // 정수로 된 초(sec)를 입력 받아, "06:17:20" 등의 형식의 문자열로 시분초를 배열에 저장
int hour, min, sec;
sec = secs % 60;
min = secs / 60 % 60;
hour = secs / 3600;
sprintf_s(s, size, "%02d:%02d:%02d", hour, min, sec);
}
위의 소스에서 sprintf_s 라는 함수는 sprintf 의 보안 강화 버전입니다. 비주얼C 2005나 그 이상의 컴파일러에서만 사용 가능합니다. s_sprintf 가 아니라 sprintf_s 입니다.
컴파일 및 실행 결과 화면:
D:\Z>cl example.cpp
example.cpp
D:\Z>example.exe
타이머 ON! 아무키나 누르면 종료
타이머 OFF! 경과 시간은: [00:00:02]
D:\Z>example.exe
타이머 ON! 아무키나 누르면 종료
타이머 OFF! 경과 시간은: [00:01:53]
D:\Z>example.exe
타이머 ON! 아무키나 누르면 종료
타이머 OFF! 경과 시간은: [24:00:05]
D:\Z>
example.cpp
D:\Z>example.exe
타이머 ON! 아무키나 누르면 종료
타이머 OFF! 경과 시간은: [00:00:02]
D:\Z>example.exe
타이머 ON! 아무키나 누르면 종료
타이머 OFF! 경과 시간은: [00:01:53]
D:\Z>example.exe
타이머 ON! 아무키나 누르면 종료
타이머 OFF! 경과 시간은: [24:00:05]
D:\Z>
맨 마지막의 24:00:05 라는 결과는 컴퓨터 시계를 하루 앞으로 당겨서 강제로 출력한 결과입니다.
▶▶ C언어] 현재 날짜/시간/년월일,시분초 구하기 함수(오늘 날짜 시간): Current Date, Time
컵라면 타이머 (온라인):
▶▶ 컵라면 타이머; 인터넷 요리용 타이머, 모래시계 Cooking Timer
스톱워치 (온라인 버전 스톱와치):
▶▶ 스톱워치, 초시계, 온라인 스톱와치, 100분의 1초 Stopwatch
tag: cpp
C언어 | C/C++ (Visual C++)
<< Home