(c#,멀티쓰레드강좌)쓰레드, sta, mta개요, 간단한 멀티쓰레드...

9
C# 기초강좌 멀티쓰레드(Thread) 작성법 STA, MTA 탑크리에듀( http://www.topcredu.co.kr), 이종철

Upload: 3-2

Post on 16-Apr-2017

1.397 views

Category:

Education


8 download

TRANSCRIPT

Page 1: (C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌

C# 기초강좌 멀티쓰레드(Thread) 작성법

STA, MTA

탑크리에듀(http://www.topcredu.co.kr), 이종철

Page 2: (C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌

실습코드 및 동영상 다시 보기는 아래 URL에서

가능 합니다.

http://ojc.asia

Page 3: (C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌

쓰레드(Thread)

쓰레드는 하나의 프로세스(실행 중인 프로그램) 내에 존재하는 하나또는 여러 개의 순차적인 제어의 흐름을 관리하기 위해 사용한다.

멀티 쓰레드가 제대로 동작하기 위해서는 CPU가 여러 개 있어야 한다. 보통은 단일 CPU

를 사용하게되면 CPU는 한번에 하나의 쓰레드를 사용하므로 멀티 쓰레드로 프로그램이

실행되는 경우에 CPU의 사용 시간을 나누어서 각각의 쓰레드에게 주는 되므로 단일 쓰레드와 별차이가 없다.

쓰레드가 생성될 때마다 해당 쓰레드를 위한 Stack Frame이 할당되는데 이를 Thread

Stack이라하며 Thread Stack은 메소드 단위로 분리되어 할당된다.

탑크리에듀(www.topcredu.co.kr), 이종철

Page 4: (C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌

C# 멀티쓰레드(Multi-Thread)

C#에서 멀티 쓰레드를 사용하는 방법은 이미 C#에서 만들어놓은 Thread 클래스와

ThreadStart 델리게이트를 이용하면 된다.

간단히 C#에서 멀티 쓰레드를 위한 클래스가 어떤 것이 있고 그 사용법은 어떻게 되는가를 이해하면 된다.

//FirstWork는 쓰레드가 실행하게될 메소드 명이다.

Thread thread1 = new Thread(new ThreadStart(t.FirstWork));

thread1.start();

C#에서 쓰레드를 위한 클래스들은 System.Threading 네임스페이스 안에 정의 되어 있다.

탑크리에듀(www.topcredu.co.kr), 이종철

Page 5: (C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌

C# 멀티쓰레드(Multi-Thread)

C#에서 멀티 쓰레드를 사용하는 방법은 이미 C#에서 만들어놓은 Thread 클래스와

ThreadStart 델리게이트를 이용하면 된다.

간단히 C#에서 멀티 쓰레드를 위한 클래스가 어떤 것이 있고 그 사용법은 어떻게 되는가를 이해하면 된다.

//FirstWork는 쓰레드가 실행하게될 메소드 명이다.

Thread thread1 = new Thread(new ThreadStart(t.FirstWork));

thread1.start();

C#에서 쓰레드를 위한 클래스들은 System.Threading 네임스페이스 안에 정의 되어 있다.

탑크리에듀(www.topcredu.co.kr), 이종철

Page 6: (C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌

쓰레드 동작방식(STA vs MTA)

STA (single-threaded apartment)와 MTA (multi-threaded apartment)는 COM과 관련된

쓰레드 설정이다.

STA는 단일 쓰레드로 운영되는 것이며 MTA는 멀티 쓰레드로 운영되는 것이다. C#은 기본적으로 MTA로 운영되는데 Main 메소드에 STAThread 라고 설정하지 않으면 기본적으로

MTAThread 방식으로 운영된다는 것이다. 설정은 아래처럼 두가지 형태로 가능하다.

[MTAThread]

public static void Main() {

Thread.CurrentThread.ApartmentState = ApartmentState.MTA;

……

STA를 사용하는 경우는 싱글 쓰레드로만 동작되는 COM 객체를 사용하는 경우인데 드래그 드랍 기능, 클립보드 관련 기능, OpenDialog, SaveFileDialog, 웹브라우저 컨트롤 등을 사용하는 경우 STAThread로 동작 되어야 한다.

탑크리에듀(www.topcredu.co.kr), 이종철

Page 7: (C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌

간단한 멀티 쓰레드 예제 - 1

using System;

using System.Threading;

public class ThreadTest {

public static int sleepingTime;

public void FirstWork() {

for (int i = 0; i < 10; i++) {

//밀리세컨드 단위로 주어진 기간만큼 쉬었다가 다시 실행됨

Thread.Sleep(sleepingTime);

Console.Write("First{0} ", i);

}

}

public void SecondWork() { for (int i = 0; i < 10; i++) { Thread.Sleep(sleepingTime); Console.Write("Second{0} ", i); } }

탑크리에듀(www.topcredu.co.kr), 이종철

Page 8: (C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌

간단한 멀티 쓰레드 예제 - 2

[MTAThread]

public static void Main() {

ThreadTest.sleepingTime = int.Parse(Console.ReadLine());

ThreadTest t = new ThreadTest();

//Thread는 생성자의 인자로 ThreadStart Delegate를 인자로 받는다.

//ThreadStart Delegate의 인자는 쓰레드가 실행 할 메소드명

Thread first = new Thread(new ThreadStart(t.FirstWork));

Thread second = new Thread(new ThreadStart(t.SecondWork));

first.Start(); second.Start();

}

}

[실행결과] 100 First0 Second0 First1 Second1 Second2 First2 First3 Second3 First4 Second4 First5 Second5 ……

탑크리에듀(www.topcredu.co.kr), 이종철

Page 9: (C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌

This Practice makes the Expert!

C#,ADO.NET,Network 프로그래밍 기초과정 C#기초, Xamarin 앱 개발과정 Xamarin 앱개발 과정 C# WPF, XAML 프로그래밍