2012년 12월 19일 수요일

Thread 개념

Socket통신을 사용하다가 Client가 통신이 끊기게 되면
Server는 이를 알아채고 클라이언트의 접속을 다시 대기해야합니다.

Socket.Accept();

Accept()부분을 쓰레드로 생성하여
기본 스레드와 별개로 스레드를 생성해서 Accept()를 했습니다.
이러면 기본스레드에 대해 비동기적으로 Accept()를 수행됩니다.

스레드를 이해하고 얼마 지나지 않으면 스레드에 기억이..가물가물..
또 다시 스레드에대 학습하게 됩니다.-_-;;

간단히 스레드에 대해 알아봅시다.
Worker클래스의 DoWork 메소드를
Thread.Start() 메소드로 실행하여 줍니다.

workThread.IsAlive 는 현재 스레드의 실행상태를 나타내는 값을 가져옵니다.
스레드가 시작되었으며 정상적으로 종료 또는 중단되지 않았으면 true고, 그렇지않으면 false

Thread.Sleep(1); 이렇게 한다면 기본스레드가 잠시 중단하고
다른 스레드(workerThread)는 DoWork메소드의 루프를 몇차례 반복하여 실행할수 있습니다.
Thraed.Abort()는 다른 스레드에서 스레드를 종료 할수 있습니다.
하지만 스레드의 작업이 완료됬는지 관계없이 스레드가 종료되어 리소스를 정리할수없습니다.

그래서 기본스레드(메인)에서 Thread.Join()메소드를 호출하여
개체가 가리키는 스레드가 종료될때까지 현재 스레드를 차단하거나 대기상태로 만듭니다.
Join()은 작업자스레드가 반환되고 자체 종료될떄까지 반환되지 않습니다.

관련내용은 http://msdn.microsoft.com/ko-kr/library/7a2f3ay4(v=vs.90).aspx
다음글에서 쓰레드와 관련되는 클래스를 만들어 사용해 보기로 합시다.

댓글 없음:

댓글 쓰기