-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
해결됨
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
Rookiss
지식공유자2022.03.06
1+2
네 그렇습니다
3. 제 생각이 맞다면 새로운 작업 쓰레드와 메인쓰레드는 번갈아가면서 실행될텐데 메인쓰레드에서 이벤트가 발생될 때 새로운 작업 쓰레드가 끝나길 기다리는 Join 함수 같은 것은 따로 없나요?
C++서버라면 그렇게 해야 하는데,
C# 서버에서는 자체 관리하는 쓰레드풀에서 쓰레드를 꺼내서
일감을 처리하고 알아서 종료되면 쓰레드풀에서 회수해갑니다.
답변 1