none
Thread Start를 한 이후 Join은 반드시 하여야 하나요? RRS feed

  • 질문

  • 안녕하세요.

    C# 초보입니다.

    처음 Thread 를 사용해봅니다만, 책에 보니 Start로 분기를 했다가 Join으로 Main process에 회귀를 하여야 하는 것으로 이해를 했습니다.

    질문은 아래와 같이 메뉴등의 클릭 Event에 의하여 Event 처리 내부에서 Thread를 사용하는 경우 Join은 어디에 하여야 하며, 아래 코드와 같이 Join을 하지 않더라도 문제가 없는지 알고 싶습니다.

    실제로는 아래 Click Event안에 for 문으로 상당히 오래 걸리는 내용이 있었습니다.

    그런데 그 부분을 처리하는데 오랜 시간이 걸리다보니, 실행하였을 때 종료나 창이동, 화면 업데이트등이 아예 안되서, Thread로 하면 괞찮을까 싶어서 아래와 같이 For문을 Thread_처리부() 로 옮겼더니 그러한 문제가 해결이 되었습니다.

    다만 아래 t1.Join()을 주석처리 하였는데, 주석처리를 하지 않으면 Thread 효과가 안나고, 프로그램 컨트롤이 안되었습니다.

    t1.Join()을 반드시 하여야 하는 것이라면 어디다가 하는지 몰라서 고수님들 조언을 부탁드립니다...^^;

    private void ToolStripMenuItem_Click(object sender, EventArgs e)
     {
           Thread t1 = new Thread(new ThreadStart(Thread_처리부));
            t1.Start();
            //t1.Join();    
     }

    private void Thread_처리부()
    {

          for(...)

          {

            ...

          }

    }

    2015년 4월 15일 수요일 오후 4:24

답변

  • 새롭게 생성된 스레드가 종료할 때까지 기다려야 한다면 그 때 Join을 호출하는 것입니다.

    예를 들어, A 스레드가 B 스레드를 생성했는데, B 스레드가 종료할 때까지 기다려야 한다면 그 때 A 스레드의 코드에서 B 스레드의 Join을 호출하는 것입니다.

    즉, Join은 반드시 호출해야 한다는 규칙은 없습니다. (실제로, 대상 스레드의 종료 결과를 명시적으로 얻기 위해 기다려야 할 필요가 있는 경우를 제외하고는 거의 안 씁니다.)

    • 답변으로 표시됨 Cruiser9 2015년 4월 16일 목요일 오전 4:08
    2015년 4월 15일 수요일 오후 4:31