인프런 커뮤니티 질문&답변

좋은 캥거루님의 프로필 이미지
좋은 캥거루

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

쓰레드 생성

17분 40초경 질문

작성

·

316

0

안녕하세요 강사님!

다름이 아니라 밑에 분 질문중에 똑같은 질문이 있어 그걸 보고 해결하려고 햇는데 해결이 안되어 질문올립니다.

 

https://inflearn.com/questions/79914

제가 참고한 게시물이구요.

 

SetMinThreads와 SetMaxThreads 다 true로 뜨는 걸 확인했는데도 for문에서  i < 4로하면 작동하지 않고 i < 3으로해야 작동이 됩니다... 또 답글로 남겨주신분이 while문을 안써서 그럴 수 있다고 하셨는데 while문도 다 정확히 들어가있는데 작동하지 않아요. 원인을 알 수 있을까요?

 

+) 로그로 스레드 갯수 확인해봤는데 스레드 갯수는 정확히 5개 생성되었는데 하나가 놀고있네요.. 원인이 뭘까요 ㅠㅠ

답변 2

0

댓글 이렇게 남겨두면 될까요??ㅠ

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

위 내용만으로는 알 수가 없습니다.
기본적으로 전체 코드 스샷을 남겨주셔야 정확한 원인이 판별됩니다.
그리고 for i < 4로 하면 작동하지 않는다는게 "Hello Thread"가 아예 출력되지 않는다는 것일까요?

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

namespace ServerCore

{

class Program

{

static void MainThread(object state) // 쓰레드풀을 사용하기 위해서 매개변수로 object를 하나 받아줘야 함 (함수내에서 원하면 해당 매개변수를 캐스팅해서 사용, 꼭 사용할 필요는 없음)

{

for (int i = 0; i < 5; ++i)

{

Console.WriteLine("Hello Thread!");

}

}

// 메인직원

static void Main(string[] args)

{

// 쓰레드풀이 먹통이 되는 상황

ThreadPool.SetMinThreads(1, 1); // 첫번째 매개변수는 최소 일반 스레드풀 갯수 설정, 두번째 매개변수는 아직 몰라도 되는 부분임 (최소 인풋아웃풋(네트워크 이벤트를 기다린다거나)하는 스레드 갯수 설정)

ThreadPool.SetMaxThreads(5, 5); // 최대 갯수 설정하는 메소드 (5개를 누군가가 다 물고있으면 그 다음요청은 실행되지 않음)

for (int i = 0; i < 4; ++i)

{

ThreadPool.QueueUserWorkItem((obj) => { while (true) { } }); // obj를 받아서 무한루프해주세요

}

// 쓰레드풀에게 단기일감 주기 (일감을 받고 대기상태)

ThreadPool.QueueUserWorkItem(MainThread);

while (true)

{

}

}

}

}

"Hello Thread"가 아예 출력되지 않는다는 것 맞습니다 !

좋은 캥거루님의 프로필 이미지
좋은 캥거루

작성한 질문수

질문하기