레이블이 Interrupt인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Interrupt인 게시물을 표시합니다. 모든 게시물 표시

2022년 2월 25일 금요일

C# Thread Interrupt, Abort를 이용한 쓰레드 종료

 

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


(동영상)C# 쓰레드(Thread) Interrupt, Abort를 이용한 쓰레드 종료

(동영상)C# 쓰레드(Thread) Interrupt, Abort를 이용한 쓰레드 종료C# ThreadInterrupt, Abort를 이용한 쓰레드 종료C# 멀티 쓰레드(쓰레드 종료방법)쓰레드는 할일을 마치고 수명이 다해 스스로 종료하는것이

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,  

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...