개발/코더 탈출
과도한 반복문에는 가능하면 Sleep()을 주자
-=HaeJuK=-
2013. 5. 22. 17:14
반응형
CPU 점유율 제어와 Sleep()
함수 사용
1. 과도한 반복문에는 Sleep()
을 사용하자
무한 반복문이나 자원을 많이 소모하는 루프에서는 Sleep()
을 적절히 사용하여 CPU 자원의 독점을 방지해야 합니다. 그렇지 않으면 CPU를 과도하게 점유하게 되어 프로그램이 느려지거나 UI가 응답하지 않게 될 수 있습니다.
2. Windows 프로그램의 멀티 스레드 환경
Windows 환경에서 UI 스레드와 기능을 처리하는 다른 스레드는 자원을 공유하게 됩니다. 이때 특정 스레드가 CPU를 과도하게 사용하면 UI 스레드가 응답하지 않거나 프로그램이 멈출 수 있습니다. 예를 들어, 무한 반복문이 있는 코드에서 CPU 100% 점유가 발생할 수 있습니다.
3. CPU 100% 점유 코드 예시
#include "stdafx.h"
#include
#include
int main()
{
unsigned int i = 0;
while (true)
{
i++;
if (i == 10000000)
{
i = 0;
}
}
return 0;
}
위의 코드는 무한 반복문에서 변수를 증가시키는 동작을 계속 반복하여 CPU를 100% 사용하게 됩니다. 이 상태에서는 다른 스레드가 자원을 사용할 수 없게 되어 프로그램이 멈추거나 응답이 느려질 수 있습니다.
4. Sleep()
을 이용한 해결 방법
Sleep()
함수는 현재 스레드를 잠시 멈추게 하여 CPU 자원을 다른 스레드에 할당할 수 있도록 합니다. Sleep()
을 사용하면 스레드가 잠시 쉬면서 CPU가 다른 작업을 처리할 수 있게 됩니다.
#include "stdafx.h"
#include
#include
int main()
{
unsigned int i = 0;
while (true)
{
i++;
if (i == 10000000)
{
Sleep(3); // 3ms 동안 휴식
i = 0;
}
}
return 0;
}
5. 총평
Sleep()
은 CPU 과다 점유 문제를 간단히 해결할 수 있는 방법입니다.
완벽한 해결책은 아니지만, CPU 자원을 잠시 양보함으로써 다른 스레드가 동작할 수 있도록 해줍니다. 중요한 작업을 할 때는 이벤트 기반 프로그래밍을 고려해야 하며, Sleep()
으로 모든 문제가 해결되지는 않으므로 적절히 사용해야 합니다.
728x90