http://ojc.asia/bbs/board.php?bo_table=LecCsharp&wr_id=426
ojc.asia

C# Thread
Interrupt, Abort를 이용한 쓰레드 종료
C# 멀티 쓰레드(쓰레드 종료방법)
쓰레드는 할일을 마치고 수명이 다해 스스로 종료하는것이 좋지만 부득이 강제로 종료해야 하는 경우가 있다.
종료하는 방법은 강제종료를 위한 Abort, 종료시킬 쓰레드에 Interrupt를 걸어서 그 쓰레드가 Wait, Sleep, Join 상태(이때 쓰레드 상태는 ThreadState.WaitSleepJoin.)가 되면 ThreadInterruptedException이 발생하므로 catch 절에서 예외를 받아서 쓰레드를 종료하면 된다.
Thread.Interrupt 메소드 : 쓰레드가 동작중인 상태를 피해서 WaitSleepJoin 스레드 상태에 들어갔을 때 ThreadInterruptedException을 던져 예외처리부에서 쓰레드를 중지시 킴. 쓰레드가 WaitSleepJoin 상태일 때 : 즉시 ThreadInterruptedException 발생 쓰레드가 Running 상태일 때 : ThreadInterruptedException을 예약, WaitSleepJoin일때 ThreadInterruptedException 발생 Thread.Abort 메소드 :쓰레드를 강제로 종료하는데 프로세스 자신이나 시스템에 영향이 없는 경우에 사용하면 되지만 가능한 사용안하는 것이 좋다. |
using System.Threading;
using System;
namespace ThreadInterrupt
{
class Program
{
public static Thread sleeperThread;
public static void Main(string[] args)
{
sleeperThread = new Thread(new ThreadStart(ThreadToSleep));
sleeperThread.Start();
sleeperThread.Interrupt();
}
private static void ThreadToSleep()
{
int i = 0;
while (true)
{
Console.WriteLine("[Sleeper : " + i++ + "]");
if (i == 9)
{
try
{
Console.WriteLine("i가 9가 되어 1초쉼...");
Thread.Sleep(1000);
}
catch (ThreadInterruptedException e)
{
Console.WriteLine("ThreadInterruptedException ...");
Environment.Exit(0);
}
}
}
}
}
}
[결과]
[Sleeper : 0]
[Sleeper : 1]
[Sleeper : 2]
[Sleeper : 3]
[Sleeper : 4]
[Sleeper : 5]
[Sleeper : 6]
[Sleeper : 7]
[Sleeper : 8]
i가 9가 되어 1초쉼...
ThreadInterruptedException …
[Thread.Abort예제]
using System;
using System.Threading;
public class Example
{
public void Work()
{
for (char i = 'A'; i < 'Z'; i++)
{
Console.WriteLine(i);
Thread.Sleep(1000);
}
}
}
public class Test
{
public static void Main()
{
Example exam = new Example();
Thread x = new Thread(new ThreadStart(exam.Work));
Thread y = new Thread(new ThreadStart(exam.Work));
x.Start();
y.Start();
Thread.Sleep(3000);
try
{
x.Abort();
y.Abort();
}
catch (ThreadAbortException except)
{
Console.WriteLine(except.ToString());
}
Console.WriteLine("Bye Bye!!");
}
}
#쓰레드, #Thread, #Interrupt, #Abort, #쓰레드종료, #스레드종료, #닷넷쓰레드, #시샵스레드, #시샵교육, #닷넷교육, #쓰레드Abort, #쓰레드Interrupt, 쓰레드, Thread, Interrupt, Abort, 쓰레드종료, 스레드종료, 닷넷쓰레드, 시샵스레드, 시샵교육, 닷넷교육, 쓰레드Abort, 쓰레드Interrupt,