2024. 7. 26. 00:59ㆍC#
안녕하세요. 진득코딩입니다. 이번 시간에는 저번 시간에 살펴본 멀티 스레드의 불확실성을 이용한 레이스 프로그램을 만드는 실습을 해보도록 하겠습니다.
멀티스레드 레이스
요구사항
1. 총 5명의 참가자가 차량을 가지고 있습니다.
2. 각 차량은 랜덤한 시간 간격으로 한 단위 움직입니다. 이 시간 간격은 0.1초에서 1초 사이로 설정합니다.
3. 차량이 결승선에 도달하면 해당 참가자의 이름과 완료 시간을 출력합니다.
4. 모든 차량이 결승선에 도달하면 레이스를 종료합니다.
위와 같은 요구사항을 바탕으로 멀티스레드의 기본 개념과 C#의 스레드 관리 방법에 대해서 연습해보도록 하겠습니다.
시연
프로그램을 실행하게 되면 위와 같은 화면이 나오게 됩니다. 왼쪽에 레이스 시작 버튼이 있고 오른쪽에는 큰 textBox가 위치해 있습니다.
실행 버튼을 누르게 되면 1번부터 5번까지의 차가 출발합니다. 이는 5개의 서브 스레드가 실행되는 것을 의미합니다.
서브 스레드들이 실행되고 조금 있으면 랜덤으로 차량들이 도착합니다. 처음에는 1번부터 5번까지 차례로 스레드가 실행되었지만 도착한 순서를 살펴보게 되면 그 순서와는 상관없이 랜덤으로 도착해있습니다. 도착하면서 도착 시간이 찍히게 됩니다.
코드 살펴보기
각각의 차가 얼만큼 갔는지를 나타내는 carLength와 도착여부를 확인하는 carStop 변수들을 선언해주었습니다. 원래는 date를 사용하였는데 초단위로 극적인 데이터가 나오지 않아서 좀 더 세밀한 stopwatch를 선언해주었습니다. 또한 sleep함수가 랜덤으로 실행되게 하기 위해서 rd도 선언해주었습니다.
버튼을 클릭했을 때의 함수입니다. 해당 버튼을 눌렀을 때 기준으로 초를 세야하기 때문에 해당 메서드에서 Restart()를 해주었습니다. for문을 돌려서 각각의 스레드가 시작되도록 driveCar 메서드를 하나하나 실행해주었습니다. 그럼 driveCar 메서드를 살펴보도록 하겠습니다.
각각의 스레드를 돌리고 실행되고 있는 스레드가 해당 메서드에 들어오도록 하고 carLength에 1을 증가시켜주었습니다. carLenth가 10이 되면 carStop을 true로 바꿔주고 텍스트를 출력해주고 그렇지 않다면 RamdomSleep() 메서드를 만나서 다른 메서드로 넘어가도록 함수를 만들었습니다.
멀티 스레드의 어떤 스레드로 컨텍스트 스위칭될 지 모르는 불확실성을 이용하여 게임같은 실습을 할 수 있어서 뜻깊은 시간이었습니다. 이번 포스팅은 여기까지입니다. 끝까지 봐주셔서 감사합니다.😀
'C#' 카테고리의 다른 글
[C#] WPF를 이용하여 C# 개발하기 (0) | 2024.07.29 |
---|---|
[C#] 대리자와 이벤트에 대해서 살펴보자 (0) | 2024.07.26 |
[C#] 멀티 스레드에 대해서 알아보자 (0) | 2024.07.26 |
[C#] 제네릭 컬렉션으로 빠르고 안정적이게 데이터를 다뤄보자 (0) | 2024.07.26 |
[C#] 데이터 집합을 다루는 컬렉션을 알아보자 (0) | 2024.07.25 |