• Thread
    1. 컴퓨터 프로그램 수행 시 프로세스 내부에 존재하는 수행 경로, 일련의 실행 코드
    2. 프로세스 생성 시 하나의 주 스레드가 생성되어 대부분의 작업처리, 주 스레드 종료->프로세스 종료
      - 멀티 스레딩 : 하나의 프로세스 내에서 다수의 스레드가 동시에 수행
    3. 스레드 구성
      - 예외 처리기
      - 스케쥴링 우선 순위
      - 구조집합(시스템에서 일정을 잡을 때까지 스레드 컨텍스트를 저장하는데 사용)
  • 프로세스
    1. 실행 중인 프로그램을 의미
    2. 하나 이상의 스레드를 가짐(primary thread)
    3. 메인 스레드는 프로세스가 할당한 메모리 영역에서 실행, 프로세스에 할당된 시스템 리소스 사용
    4. 하나의 프로세스가 스레드 여러개 소유 가능
  • User Defined Thread 사용 이유
    • 작업에 특정 우선 순위를 지정이 필요하면
    • 실행 시간이 오래 걸려 다른 작업을 차단이 필요하면
    • 모든 ThreadPool 스레드는 MTA(다중스레드아파트)에 있는데 일부만 STA(단일스페드아파트)에 두어야 하는 경우
    • 사용하는 기능을 위해 안정적인 ID가 필요한 경우(중단, 일시중단, 검색)
    • 사용자 인터페이스와 상호 작용하는 백그라운드 스레드를 실행하는 것이 필요
  • 스레드 생성과 소멸
    • 스레드 관련 주요 클래스(다중스레드를 위한 클래스)
      • 1. Thread class : 스레드를 만들고 제어, 해당속성 설정 및 상태를 가져옴
        • 생성 : 스레드 클래스를 이용한 생성, 스레드 객체 생성 후 이 객체의 생성자에 ThreadStart 위임형식을 전달
          • 프로세스는 하나 이상의 스레드를 만들어 해당 프로세스와 관련된 프로그램 코드 부분을 실행
          • 스레드가 실행하는 프로그램 코드를 지정하려면 ThreadStart 대리자 또는 ParameterizedThreadStart 대리자를 사용
          • ParameterizedThreadStart 대리자를 사용하여 스레드 프로시저에 데이터를 전달할 수 있음

Thread classdp 의한 생성 : Thread 객체생성 후에 이 객체의 생성자에 ThreadStat 위임 형식을 전달.

[Thread property and method]

Thread.currentThread : 현재 실행중인 스레드 객체 참조 반환

Thread.IsAlive : 특정 스레드의 실행 여부

Thread.IsBackground : 백그라운드 스레드 여부

Thread.Name : 특정 스레드의 이름 지정 반환

Thread.ThfreadState : 스레드 상태 반환

Thread.Priority : 스레드 우선순위 설정 반환

Thfread.Abort() : 스레드 중지

Thread.GetHashCode() : 스레드 ID 반환

Thread.interrupt() : 스레드에 인터럽트 호출

Thread.Join() : 중지된 스레드 동기화

Thread.Resume() : Suspend된 스레드를 다시 활성화

Thread.Start() : 스레드 시작

Thread.Suspend() 스레드를 Suspend

'C# 기초 > MyResearching' 카테고리의 다른 글

[C#][Delegate][Event]  (0) 2020.02.16
[C#][Event]  (0) 2020.02.14
[C#][Example]TreeView  (0) 2020.02.13
  • 메서드 자체를 값으로 갖는 타입의 인스턴스 생성
  • C/C++만 아는 사람에겐 함수 포인터의 의미로 다가옴
  • 일어난 일과 그 일에 대한 다음 처리를 분리

  • delegate를 사용하는 경우
    • 이벤트 디자인 패턴을 사용
    • 정적 메서드를 캡슐화해야 하는 경우
    • 메서드를 구현하는 개체에 대한 다른 속성 메서드 또는 인터페이스에 호출자가 액세스할 필요가 없을 때
    • 쉽게 작성
    • 메서드에 대한 여러 구현이 클래스에 필요한 경우
  • 인터페이스를 사용하는 경우
    • 호출할 수 있는 관련 메서드의 그룹이 있는 경우
    • 클래스에 메서드의 구현이 하나만 필요한 경우
    • 인터페이스를 사용하는 클래스에서 이 인터페이스를 다른 인터페이스나 클래스 형식에 캐스팅하려는 경우
    • 비교 메서드의 경우와 같이 구현하려는 메서드가 클래스의 형식이나 동일성 여부와 관련되어 있는 경우

Non-static 메서드를 인자로 타입의 인스턴스 

  • 35번 라인: 이벤트에 test.ActuallyRun 메서드를 인자로 하는 타입의 인스턴스 delegate(대리자)를 연결
  • 36번 라인: EvenTrigger로 이벤트 발생하고 delegate로 인해 ActuallyRun 실행

'C# 기초 > MyResearching' 카테고리의 다른 글

[C#][Thread]  (0) 2020.02.16
[C#][Event]  (0) 2020.02.14
[C#][Example]TreeView  (0) 2020.02.13
  • 이벤트의 호출과 응답에 관하여 동작에 관한 내용
  • 호출:이벤트 발생과 발생 통지(이벤트가 생겼다는 것을 알림)는 Publisher가 담당
  • 응답:이벤트가 발생한 것을 알고 호출되어질 메서드(이벤트 핸들러)를 등록한 객체
  • 용도
    • .NET Framework 공용 언어 런타임을 대상으로 하는 다른 프로그램에서 사용하는 것이 가능함
  • 이벤트 선언 단계
    • 대리자를 만들거나 지정
    • 사용자가 지정 이벤트를 정의하는 경우 해당 이벤트 키워드와 함께 사용할 대리자가 있는지도 확인
      •  .NET Framework에서 이벤트가 미리 정의된 경우 이벤트의 소비자가는 대리자의 이름으로만 가능함

Clicked가 이벤트에 의해 실행하지만 Delegate 로 Test.TestGreeting을 메서드를 값으로 하는 인스턴스로 인해 Test.TestGreeting 메서드가 실행됨

'C# 기초 > MyResearching' 카테고리의 다른 글

[C#][Thread]  (0) 2020.02.16
[C#][Delegate][Event]  (0) 2020.02.16
[C#][Example]TreeView  (0) 2020.02.13

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            TreeViewItem tvi1 = new TreeViewItem() { Header = "I" };
            TreeViewItem tvi1A = new TreeViewItem() { Header = "IA" };
            TreeViewItem tvi1A1 = new TreeViewItem() { Header = "IA1" };
            TreeViewItem tvi1A2 = new TreeViewItem() { Header = "IA2" };
            TreeViewItem tvi1B = new TreeViewItem() { Header = "IB" };

            tvi1.Items.Add(tvi1A);
            tvi1A.Items.Add(tvi1A1);
            tvi1A.Items.Add(tvi1A2);
            tvi1.Items.Add(tvi1B);

            treeView1.Items.Add(tvi1);
        }

'C# 기초 > MyResearching' 카테고리의 다른 글

[C#][Thread]  (0) 2020.02.16
[C#][Delegate][Event]  (0) 2020.02.16
[C#][Event]  (0) 2020.02.14

+ Recent posts