갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 프로그래밍 (146)
      • 자바 (9)
      • 안드로이드 (2)
      • 유니티 (20)
      • C++ (38)
      • C# (56)
      • HTML (2)
      • 파이썬 (3)
      • 자료구조 (2)
      • 알고리즘 (0)
      • 문제풀이 (4)
      • 디자인 패턴 (7)
      • 카카오톡 봇 (1)
      • 엑셀 (1)
      • 기타 (1)
    • 게임 (21)
      • 테일즈위버 (0)
      • 카이로소프트 (1)
      • 순위 (19)
      • 기타 (1)
    • 일상 (13)
      • 카페 (1)
      • 방탈출 (12)
    • 기타 (6)
      • 웃긴자료 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • c# 코루틴
  • C++ virtual
  • 롤 골드그래프
  • c# unboxing
  • c# delegate
  • C# boxing
  • 모바일 게임 순위
  • C# 예외 처리
  • 글로벌게임매출
  • C++ 상속
  • c# coroutine
  • 유니티 그래프 그리기
  • 유니티 골드그래프
  • 전세계 게임 매출
  • 유니티 그래프
  • 알고리즘
  • 자바
  • Unity Graph
  • C++
  • 게임매출순위
  • c# collection
  • pc게임 순위
  • 게임 디자인 패턴
  • pc 게임 순위
  • 2020년 게임 매출
  • 전세계게임매출순위
  • 게임 매출 순위
  • c# Thread
  • 강남 방탈출
  • C++ 소멸자

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥

나는야 프로그래머

[C#] 스레드 클래스 멤버
프로그래밍/C#

[C#] 스레드 클래스 멤버

2020. 5. 8. 17:08
728x90
반응형

1. Thread 클래스 멤버

using System;
using System.Threading;

class Program {
    public static void F1() {
        Console.WriteLine("F1 Start");
        Thread.Sleep(1000);
        Console.WriteLine("F1 End");
    }
    
    public static void Main() {
        Thread t1 = new Tread(F1);
        t1.Start();
        
        Console.WriteLine($"{t1.ManagedThreadID}");
        Console.WriteLine($"{t1.Priority}");
        Console.WriteLine($"{t1.IsThreadPoolThread}");
        Console.WriteLine($"{t1.IsAlive}");
    }
}

 

이번엔 스레드 클래스의 멤버에 대해 알아보자.

 ① Thread.ManagedThreadID

    => 스레드의 고유한 ID 값

 

 ② Thread.Priority

    => 스레드의 우선순위

    => 특별한 설정을 하지 않는 경우 Normal

 

 ③ Thread.IsThreadPoolThread

    => 현재 스레드가 스레드 풀에 있는 것이냐 조사

    => task로 만들었느냐 아니냐 조사

 

 ④ Thread.IsAlive

    => 현재 살아있는지 ( 동작중인지 )

 

using System;
using System.Threading;

class Program {
    public static void F1() {
        Console.WriteLine("F1 Start");
        Thread.Sleep(1000);
        Console.WriteLine("F1 End");
    }
    
    public static void Main() {
        Thread t1 = new Tread(F1);
        t1.Start();
        
        Console.WriteLine($"{t1.ManagedThreadID}");
        Console.WriteLine($"{t1.Priority}");
        Console.WriteLine($"{t1.IsThreadPoolThread}");
        Console.WriteLine($"{t1.IsAlive}");
        
        t1.IsBackGround = true;
        
        t1.Join();
    }
}

 

그 다음은 IsBackGround이다.
생각해볼게 위의 코드는 주 스레드가 먼저 끝나게 되고
새로 만든 스레드가 나중에 끝나게 된다.
이 때, 주 스레드가 끝나면 다른 스레드도 끝낼지, 다른 스레드의 동작이 끝날때까지 대기할지 정해야 한다.

이 때, IsBackGround를 따로 설정하지 않으면 끝날때까지 대기한다.
하지만 IsBackGround를 true로 놓게 되면 주스레드가 끝나면 다른 스레드도 강제로 죽게된다.

 ① ForeGround 스레드 : 주스레드가 종료 되어도 계속 작업 수행

 ② BackGround 스레드 : 주스레드가 종료 되면 강제 종료

 

 ③ Thread.Join()

    => 주스레드가 종료되어도 대기

 

using System;
using System.Threading;

class Program {
    public static void F1() {
        Thread t = Thread.CurrentThread;
        Console.WriteLine("F1 : "+t.ManagedThreadID);
    
        Console.WriteLine("F1 Start");
        Thread.Sleep(1000);
        Console.WriteLine("F1 End");
    }
    
    public static void Main() {
        Thread t1 = new Tread(F1);
        t1.Start();
        
        Console.WriteLine($"{t1.ManagedThreadID}");
        Console.WriteLine($"{t1.Priority}");
        Console.WriteLine($"{t1.IsThreadPoolThread}");
        Console.WriteLine($"{t1.IsAlive}");
        
        t1.IsBackGround = true;
    }
}

 

마지막으로 메소드 내부에서도 자신의 ID값을 출력하고 싶다면
Thread가 가지고 있는 속성 중 CurrentThread가 있다.
이것을 이용하면 메소드 내부에서도 자신의 ID값을 출력할 수 있다.
728x90
반응형

'프로그래밍 > C#' 카테고리의 다른 글

[C#] Dispose() 메소드  (0) 2020.05.11
[C#] Task 클래스  (0) 2020.05.10
[C#] 스레드 개념 (Thread)  (0) 2020.05.08
[C#] Fluent vs Query (LINQ Fluent vs Query Syntax)  (0) 2020.05.07
[C#] LINQ 원리  (0) 2020.05.07
    '프로그래밍/C#' 카테고리의 다른 글
    • [C#] Dispose() 메소드
    • [C#] Task 클래스
    • [C#] 스레드 개념 (Thread)
    • [C#] Fluent vs Query (LINQ Fluent vs Query Syntax)
    갓똥
    갓똥
    공부하며 알아가는 내용을 정리해 봅니다.

    티스토리툴바