C#으로 툴을 만들거나 하다보면, IDLE 처리가(실시간 처리등) 필요할때가 있습니다.
특히 게임 같은 경우 프레임 단위로 처리가 이루어지기 때문에 꼭 필요하죠.
하지만 보통 MFC나 C# 같은 경우는 보통 메시지 이벤트 단위로 처리를 하기때문에...
IDLE 처리를 위해서는 기본으로 생성해주는 코드에서 약간 변경을 해주어야 합니다.

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace processidle
{
           static class Program
           {
                      [STAThread]
                      static void Main()
                      {
                                 Application.EnableVisualStyles();
                                 Application.SetCompatibleTextRenderingDefault(false);
                                 
                                 // 원래 루틴
                                 // Application.Run(new Form1());

                                 using (Form1 frm=new Form1())
                                 {
                                            // frm.Created를 true로 만들기 위함
                                            frm.Show();

                                            while (frm.Created)
                                            {
                                                       // 이벤트 처리
                                                       Application.DoEvents();

                                                       // 여기서 idle 처리
                                            }
                                 }

                                 // 종료
                                 Application.Exit();
                      }
           }
}

DoEvents에서 메시지 처리를 하게 되고, 그 밑의 공간에 IDLE 처리를 할 함수를 호출하거나 원하는 작업을 코딩하면, 실시간 처리가 가능하게 됩니다.

그리고 한가지 더 눈여겨 볼 것은 Form1을 생성할때 쓰는 using 키워드입니다. using은 네임 스페이스 선언에만 쓰이는 것이 아니라 위 처럼 쓰일수 있는데... 여기서 사용된 using의 용도는 밑의 코드와 같은 의미입니다.

Form1 frm=new Form1())

// frm.Created를 true로 만들기 위함
frm.Show();

while (frm.Created)
{
   // 이벤트 처리
   Application.DoEvents();

   // 여기서 idle 처리
}

frm.Dispose();

C#에서는 C++의 delete 처럼 메모리를 해제하는 Dispose 함수가 있는데, using에서 선언된 객체가 범위를 벗어나면 자동으로 Dispose 함수가 호출되어 객체를 제거하는 기능을 가진 키워드입니다.

+ Recent posts