mfc 비동기 소켓 예제

스레드 포인터가 스레드 개체에 배치된 여러 장소가 있었으며 사용되지 않았다고 생각하기도 했습니다. 사실, 초기화되었지만 사용되지 않은 무상 변수가 많이 있었지만 전혀 존재하지 않아야합니다! 이들은 모두 제거되었습니다. 소켓이 CWinThread 개체에 액세스해야 할 이유는 없습니다. 이 경우 디자인이 잘못되었습니다. 문제는 모든 아키텍처가 작은 엔디안이 아니라는 것입니다. 이 데이터가 nework에서 4바이트로 int로 읽혀지고 SPARC 컴퓨터에서 읽는 경우(“빅 엔디안” 아키텍처의 한 예로) 0x06B50000 값을 볼 수 있으며 메시지 112,525,312바이트길이라고 생각합니다. 이 함수는 비동기 큐에 있는 루프를 시작합니다. 궁극적으로 다음 요소가 목록에서 제거되거나 보내기 플래그가 지워집니다. 소켓은 서버 프로세스에 할당된 리소스입니다.

서버는 시스템 호출 소켓()을 사용하여 생성하며 다른 프로세스와 공유할 수 없습니다. 종료 시퀀스가 시작되면 각 스레드가 종료되어야 한다는 알림이 표시되고 각 스레드가 종료되면 주 GUI 스레드에 비동기 알림을 보내고 모든 스레드가 종료되면 닫기 시퀀스가 다시 시작되고 앱이 종료됩니다. 큐에 보류 중인 연결이 없고 소켓이 비차단으로 표시되지 않으면 수락() 연결이 있을 때까지 호출을 차단합니다. 솔직히, 그것은 MFC를 공부하는 일주일을 보냈고 한 번 전화로 설명 된 스레드를 들었던 신입생과 소포모어 년 사이의 여름 인턴이 작성한 프로젝트처럼 보입니다. 그리고 한 번, 아마도, 소켓 프로그래밍에 대한 책을 읽었지만, 그것의 대부분을 잊어 버렸습니다. MSDN에서 배포에 대 한이 나쁜 프로젝트를 승인 하는 마이크로소프트에서 성인 감독 했다 어디? m_연결 변수가 설정됩니다. 이 프로그램은 연결이 완료되거나 실패할 때까지 메뉴 항목, 도구 모음 단추 또는 대화 상자 컨트롤을 사용하지 않도록 설정합니다. ON_UPDATE_COMMAND_UI 처리기에서 pCmdUI->Enable 식의 일부로 사용하거나 대화 상자 논리에서 연결 프로세스 중에 컨트롤을 활성화 하거나 사용하지 않도록 설정합니다. 연결 프로세스는 몇 초 정도 걸릴 수 있습니다. 예를 들어 DNS 이름을 해결하기 위해 70초의 시간 시간이 있고 왕복 시간과 서버 응답 시간이 포함됩니다. 따라서 90초는 불합리한 상한이 아닐 수도 있습니다. 연결을 시작하고 대화 상자를 팝업하고 “연결…”이라고 말하는 것만으로는 연결 을 시작하고 관련된 GUI의 해당 부분만 사용하지 않도록 설정하려고 합니다.

연결 상태에 대한 비동기 알림을 받게 됩니다. 이 메서드는 소유자 스레드의 컨텍스트에서 스레드 의 소유자에서 호출 되는 제어 스레드의 메서드입니다. 소유자 스레드의 컨텍스트에서 실행 되는 소켓의 메서드를 호출 합니다. socket() 함수의 3번째 인수는 항상 0이어야 하는 프로토콜입니다. 이 사양은 프로토콜 패밀리 내에서 여러 프로토콜을 허용하므로 이 인수는 패밀리에서 프로토콜을 선택하는 데 사용됩니다. 나는 또 다른 비교를했다. 원래 예제의 소켓 및 스레딩 코드는 주석 줄, 빈 줄 및 상용구 VS6 물건(약 650줄)을 제거하는 것입니다. 내 코드에는 약 960 줄의 소켓 및 스레딩 코드가 있습니다. 수량 면에서 큰 차이는 없지만 내 코드는 실제로 작동하며 모든 프로젝트 구성에서 작동합니다. `{` 또는 `}`로 구성된 194개의 줄을 계산하지 않고, 변경되지 않은 112개의 줄 중 52개가 마법사에 의해 생성되었고 31선은 `else`, `break` 및 `return`과 같은 간단한 문장으로, 현재까지 약 30줄만 남았습니다. 버전은 완전히 손길이 닿지 않은.