본문 바로가기

IT 서비스 바라보기/Programming

C# 에서 쓰레드(Thread) 사용법

 
C# 에서 쓰레드를 사용하는 방법은 미리 정의 되어있는 쓰레드 클래스를 사용하면 된다. 쓰레드를 위한 개체들은 System.Threading 네임스페이스 안에 정의되어 있다.

쓰레드 생성 단계
1 단계 : Thread 객체를 생성한다.
Thread 로 객체를 생성하는 것은 닷넷 환경에서 다룰 수 있는 쓰레드를 만드는 것이 된다. Thread 클래스는 오직 한 개의 생성자를 가지고 있다. 이 생성자는 파라메터로서 ThreadStart delegate 를 취한다. threadStart delegate 는 쓰레드를 시작할 때 호출 될 수 있는 callback 메서드로 싸여있다.

2 단계 : 호출 시 불러서 실행할 함수(메서드)를 만든다.
이 메서드는 새로운 쓰레드에 대한 시작점이 될 것이다. 인스턴스 함수인 경우에는 ThreadStart delegate 를 생성하기 전에 클래스의 객체를 생성해야 된다. static 함수의 경우에는 delegate 를 인스턴스화 하기 위하여 바로 함수의 이름을 직접 쓸 수 있다. 호출 시 실행될 메서드는 반환 형태(return type) 와 파라메터는 모두 void 로 지정해야 한다.

3단계 : 쓰레드 시작
새로 만든 쓰레드는 쓰레드의 Start 메서드를 이용하여 시작시킬 수 있다. 이것은 비동기 메서드로서 OS 에 현재 쓰레드를 시작할 것을 요청하는 것이다.

예제)
쓰레드 호출 시 실행할 메서드 정의
 public static void MyCallbackFunction()
{
    while(true)
    {
        System.Console.WriteLine("Thread Test");
    }
}

Main 메서드와 쓰레드 생성

public static void Main(string[] args)
{
    // Thread 에 객체 생성
    Thread MyThread = new Thread(new ThreadStart(MyCallbackFunction));
    MyThread.Start();
}


쓰레드 종료
쓰레드의 Abort 메서드를 호출하여 쓰레드를 종료 시킬 수 있다. 이는 ThreadAbortException 을 던지므로써 현재 쓰레드를 퇴출시키도록 한다.
MyThread.Abort();


쓰레드 중지 및 재개
쓰레드 객체의 Suspend 와 resume 메서드를 이용하여 쓰레드의 실행을 중지 하거나 다시 시작 시킬 수 있다.
Mythread.Suspend(); // 쓰레드 실행을 중지
Mythread.Resume();  // 중지된 스레드를 다시 실행하도록 함