C# Practicing(스레드)

2023. 10. 24. 15:43Game Develop/C# Programming

이번 시간은 스레드에 대해서 알아보려고 한다.

 

Thread 스레드 : 운영체제가 CPU 시간을 할당하는 기본 단위이다.

 

스레드가 여러 개 = 여러 가지 일을 동시에(따로 따로) 처리할 수 있다는 얘기가 된다.

먼저 스레드를 사용하기 위해선 네임 스페이스가 필요하다.

 

스레드의 생성자는 매개변수로 메서드를 받는다. 그렇기 때문에 간단한 메서드를 만들어준다.

1초마다 한 번씩 실행이 된다. 다음은 Thread.sleep(1000을 쓰지 않았을때의 실행 결과다)

순식간에 10까지 찍혀버렸다..

 

자 이 스레드를 정지키시는 데에는 두 가지 방법이 있다.

 

스레드 정지
Thread.abort() : 이 친구는 C# 스레드에 도가 트지 않은 이상 사용하지 않는다. 프로그램에 심각한 오류가 생길 수 있다.
Thread.Interrupt() : 따라서 우리는 스레드를 정지시키고 싶을 때 이 친구를 사용한다. 스레드가 쉴 때(잘 때) 정지.

메인 함수에 위와 같은 내용을 채워주고 돌려보면 

위와 같이 나온다. 한 가지 이상한 점이 있다. 왜 Main이랑 Thread랑 일정하게 나오지 않는걸까?

그것은 컴퓨터의 구조적, 물리적 한계 때문이다. 컴퓨터도 시간을 젤 때 완벽하게 1초로 잴 수는 없다. 따라서 근사값을 활용하게 되는데, 이 부분에서 오는 차이 때문에 순서가 엇갈리는 것이다.

 

interrupt는 i == 5일때 실행되어 현재 혹은 그 후에 멈추게하기 때문에 6까지 찍힐 수 있다.

 

스레드를 종료시키는 방법에는 Join 메서드가 있다.

Join: 들어가다, 무리에 끼다, 가입하다, 합류하다

스레드가 메인 스레드로 합류함.(합류할 때까지 메인 스레드가 기다림.)
Thread.Join() 스레드 종료.