티스토리 뷰
728x90
SetTimer vs Thread Sleep vs CreateTimerQueueTimer 비교
윈도우 애플리케이션에서 일정 시간 간격으로 작업을 수행하는 방법으로 SetTimer, Thread + Sleep, CreateTimerQueueTimer가 자주 사용됩니다. 각각의 방식은 동작 방식과 장단점이 다르며, 상황에 따라 적합한 방식이 달라집니다.
1. SetTimer
동작 방식: 일정 시간 간격으로 WM_TIMER
메시지를 메시지 큐에 추가하여 타이머 이벤트를 발생시킵니다. 메인 스레드에서 타이머 콜백이 처리됩니다.
SetTimer(hWnd, 1, 1000, NULL); // 1초마다 WM_TIMER 발생 switch (message) { case WM_TIMER: if (wParam == 1) { SendData(); // 데이터 전송 } break; }
장점
- 비동기 처리 - GUI 응답성을 유지합니다.
- 간단한 구현 - 윈도우 메시지 루프 기반으로 동작합니다.
단점
- 정확성 낮음 - GUI가 멈추거나 메시지 큐가 밀리면 지연됩니다.
- 메시지 루프 필요 - 콘솔 애플리케이션에서는 사용하기 어렵습니다.
2. Thread + Sleep
동작 방식: 별도의 스레드를 생성하고 일정 시간 동안 스레드를 블로킹합니다.
std::thread([]() { while (true) { SendData(); Sleep(1000); // 1초 대기 } }).detach();
장점
- 정확성 높음 - 지정한 시간 동안 정확하게 대기합니다.
- 메시지 루프 필요 없음 - 콘솔 및 서버 애플리케이션에 적합합니다.
단점
- 스레드 블로킹 - 스레드가 Sleep 동안 다른 작업을 수행할 수 없습니다.
- GUI 비응답 - 메인 스레드에서 사용하면 응답성이 저하됩니다.
3. CreateTimerQueueTimer
동작 방식: 타이머 큐를 생성하고, 스레드 풀에서 타이머 콜백을 실행합니다. 타이머 만료 시 별도의 스레드에서 콜백이 호출됩니다.
HANDLE hTimerQueue = CreateTimerQueue(); HANDLE hTimer; CreateTimerQueueTimer(&hTimer, hTimerQueue, (WAITORTIMERCALLBACK)[](PVOID lpParam, BOOLEAN TimerOrWaitFired) { SendData(); }, NULL, 0, 1000, WT_EXECUTEDEFAULT); DeleteTimerQueue(hTimerQueue);
장점
- 비동기 처리 - 스레드 풀에서 타이머 콜백이 실행됩니다.
- 정확성 높음 - GUI와 독립적으로 동작합니다.
단점
- 복잡성 - 리소스 관리와 콜백 구현이 필요합니다.
4. 비교표
항목 | SetTimer | Thread + Sleep | CreateTimerQueueTimer |
---|---|---|---|
비동기성 | O | X | O |
정확성 | 낮음 | 높음 | 높음 |
GUI 응답성 | 유지 | 저하 | 유지 |
멀티스레드 처리 | X | O | O |
결론: GUI 작업에는 SetTimer가 적합하며, 서버 및 백그라운드 작업에는 Thread + Sleep 또는 CreateTimerQueueTimer를 사용합니다.
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 성산블루버블
- 외돌개
- C#
- 리눅스
- ip
- C# 고급 기술
- 울릉도
- 현포다이브
- Thread
- 서귀포블루버블
- C#.NET
- C++
- 제주도
- 블루버블다이빙팀
- 블루버블
- OpenSource
- Linux
- 스쿠버다이빙
- C
- CMake
- 서귀포
- 스쿠버 다이빙
- DLL
- 블루버블다이브팀
- Build
- 윈도우
- PowerShell
- 암호화
- Windows
- 패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함
250x250