티스토리 뷰

728x90

 

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()으로 모든 문제가 해결되지는 않으므로 적절히 사용해야 합니다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
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
글 보관함
250x250