• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

Listner 구현 관련

22.03.06 20:19 작성 조회수 126

0

// 그렇지만 pending true인 경우, 즉 지연 된 경우
// AcceptAsync가 완료 되었을 때(클라이언트 소켓이 들어왔을 때) 우리에게 무엇을 보내주도록 맞춰주어야한다.
SocketAsyncEventArgs args = new SocketAsyncEventArgs();
args.Completed += new EventHandler<SocketAsyncEventArgs>(OnAcceptCompleted);
RegisterAccept(args);



안녕하세요,  Listener 강의 12분 40초 쯤에서

1. " AcceptAsync가 완료 되었을 때 우리에게 무엇을 보내주도록 맞춰주어야한다. " 라고 말씀하셨는데요.
여기서 완료가 의미하는 것이 클라이언트 소켓이 들어올때 말씀하신거 맞나요 ?

2. 그래서 pending이 true면 RegisterAccept()는 호출이 끝나서 메인쓰레드로 들어가고
메인쓰레드는 무한루프로 돌다가 AcceptAsync가 완료되어 이벤트가 호출되면
또다른 작업스레드가 켜지면서 이벤트 핸들러에 등록된 함수를 처리하고
작업쓰레드와 메인쓰레드(while문 무한루프)가 번갈아가면서 실행된다.
맞을까요 ?

3. 제 생각이 맞다면 새로운 작업 쓰레드와 메인쓰레드는 번갈아가면서 실행될텐데 메인쓰레드에서 이벤트가 발생될 때 새로운 작업 쓰레드가 끝나길 기다리는 Join 함수 같은 것은 따로 없나요?


답변 1

답변을 작성해보세요.

1

1+2
네 그렇습니다

3. 제 생각이 맞다면 새로운 작업 쓰레드와 메인쓰레드는 번갈아가면서 실행될텐데 메인쓰레드에서 이벤트가 발생될 때 새로운 작업 쓰레드가 끝나길 기다리는 Join 함수 같은 것은 따로 없나요?

C++서버라면 그렇게 해야 하는데,
C# 서버에서는 자체 관리하는 쓰레드풀에서 쓰레드를 꺼내서
일감을 처리하고 알아서 종료되면 쓰레드풀에서 회수해갑니다.