Win32 환경에서 경과 시간을 계산하는 방법은 여러 가지가 있지만, 가장 일반적인 방법을 몇 가지 소개하겠습니다. C/C++를 기준으로 설명하며, 고해상도 타이머와 기본적인 방법을 포함합니다.
1. GetTickCount()를 사용한 방법
GetTickCount는 시스템이 부팅된 이후의 밀리초 단위 시간을 반환합니다. 간단하지만 정밀도가 낮습니다 (약 10~16ms 단위).
#include <windows.h>
#include <stdio.h>
int main() {
DWORD startTime = GetTickCount();
// 시간 측정이 필요한 작업 수행
Sleep(1000); // 예: 1초 대기
DWORD endTime = GetTickCount();
DWORD elapsedTime = endTime - startTime;
printf("경과 시간: %u 밀리초\n", elapsedTime);
return 0;
}
- 장점: 간단하고 사용하기 쉬움.
- 단점: 정밀도가 낮아 짧은 시간 측정에는 부정확할 수 있음.
2. QueryPerformanceCounter를 사용한 고해상도 타이머
QueryPerformanceCounter는 높은 정밀도로 시간을 측정할 수 있는 고해상도 타이머입니다. 마이크로초 단위로 측정 가능합니다.
#include <windows.h>
#include <stdio.h>
int main() {
LARGE_INTEGER frequency, start, end;
double elapsedTime;
// 타이머의 주파수(1초당 틱 수) 가져오기
QueryPerformanceFrequency(&frequency);
// 시작 시간
QueryPerformanceCounter(&start);
// 시간 측정이 필요한 작업 수행
Sleep(1000); // 예: 1초 대기
// 종료 시간
QueryPerformanceCounter(&end);
// 경과 시간 계산 (초 단위)
elapsedTime = (double)(end.QuadPart - start.QuadPart) / frequency.QuadPart;
printf("경과 시간: %.6f 초\n", elapsedTime);
return 0;
}
- 장점: 마이크로초 수준의 고해상도 시간 측정 가능.
- 단점: 약간 더 복잡하며, 하드웨어 의존적일 수 있음.
3. GetSystemTimeAsFileTime을 사용한 방법
GetSystemTimeAsFileTime은 100나노초 단위로 시간을 제공하며, UTC 시간을 기반으로 합니다.
#include <windows.h>
#include <stdio.h>
ULONGLONG elapsed_ns( FILETIME start, FILETIME end){
ULARGE_INTEGER startTime, endTime;
// FILETIME을 64비트 정수로 변환
startTime.LowPart = start.dwLowDateTime;
startTime.HighPart = start.dwHighDateTime;
endTime.LowPart = end.dwLowDateTime;
endTime.HighPart = end.dwHighDateTime;
// 경과 시간 계산 (100나노초 단위)
return endTime.QuadPart - startTime.QuadPart;
}
int main() {
FILETIME start, end;
// 시작 시간
GetSystemTimeAsFileTime(&start);
// 시간 측정이 필요한 작업 수행
Sleep(1000); // 예: 1초 대기
// 종료 시간
GetSystemTimeAsFileTime(&end);
// 경과 시간 계산 (100나노초 단위)
ULONGLONG elapsed = elapsed_ns ( start, end );
// 밀리초로 변환
double elapsedMs = elapsed / 10000.0;
printf("경과 시간: %.3f 밀리초\n", elapsedMs);
return 0;
}
- 장점: 고해상도이고 시스템 시간 기반.
- 단점: FILETIME 구조체를 다루는 게 약간 복잡.
4. 선택 가이드
- 짧은 시간 측정: QueryPerformanceCounter를 추천 (정밀도가 높음).
- 간단한 작업: GetTickCount로 충분.
- 시스템 시간 기준: GetSystemTimeAsFileTime 사용.
'개발 > mfc' 카테고리의 다른 글
| mfc: 자식 Dialog 앞, 뒤 로 보내기 (0) | 2025.09.30 |
|---|---|
| MFC, 외부 프로그램 실행 예제 ShellExecute (0) | 2025.09.12 |
| visual studio 에서 dos (win32) project 시작 하기 (0) | 2025.09.08 |
| mfc, Static Text 글자,바닦에 빛깔 입히기 (0) | 2025.09.03 |
| mfc: Rich Edit Control 2 쓰기 (6) | 2025.08.25 |