none
[VB6] 무한 루프(Infinite Loop) 프로그램 코딩 시 CPU 사용률 줄이는 방법 RRS feed

  • 일반 토론

  • 안녕하세요. 오늘은 무한 루프 프로그램 작성 시 CPU 사용률이 100% 까지 올라가는 현상을 간단히 없애는 팁을 알려드리겠습니다.

    먼저 무한 루프 프로그램이라 함은, 다음과 같은 골격을 가진 프로그램으로...

    Sub Main()
    Do
    ...
    Loop
    End Sub


    주기적으로 렌더링을 수행하는 DirectX 기반의 응용 프로그램을 작성하는 등의 상황에서 여러 가지로 사용되고 있는 테크닉입니다. 그러나 이러한 방식으로 프로그램을 코딩하면 CPU 사용률이 100%이 되는 것은 피할 수가 없습니다.

    Q:DoEvents를 주면 해결될까요?

    Do
    ' ...
    DoEvents
    Loop


    A:
    해결되지 않습니다. DoEvents는 Window Message가 없는 경우에는 일반 루프문과 동일하게 동작하기
         때문입니다. (있다고 하더라도 CPU 사용률이 떨어지지는 않습니다.)

         그렇다면 어떻게 해결해야 할까요? 방법은 간단합니다.
        
    바로 다음과 같이 Sleep API를 사용함으로써 CPU 사용률 100% 현상을 방지할 수 있습니다.
         (물론 여기서 말하는 CPU 사용률 100% 현상은 무한 루프 프로그램 작성시 발생하는 현상을 이야기한
          것이지 일반적인 CPU 100% 사용률 현상을 이야기한 것이 아닙니다.)

    Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

    ' ...

    Dim i As Long

    Do
    ' ...

    i = i + 1&
    If (i Mod 1000&) = 0& Then
    Sleep 1&
    i = 0&
    End If
    Loop


    Sleep API는 CPU에 시간을 주는 작업으로, 위와 같이 1000번을 주기로 실행하여도 CPU가 100%이 되지 않는 것을 확인할 수 있고, 이렇게 함으로써 성능에 전혀 지장을 주지 않을 수 있습니다.

    2012년 3월 20일 화요일 오전 3:07