Windows CE에서 소켓의 비동기 패턴, 특히 소켓의 BeginRead에 스레드를 사용하는 방법에 대한 확인 또는 문서를 찾는 것입니다. MSDN의 설명서를 살펴 보았지만 모호한 참조 만 찾을 수 있습니다. 여기에 대해 살펴 보았고 데스크톱 스레딩 모델에 대한 답변을 찾았습니다. 부수적으로이 프로그램은 Compact Framework에서 구현됩니다.BeginRead/EndRead에 대한 Windows CE 6.0 스레딩 모델은 무엇입니까?
필자의 이해 내용은 다음과 같습니다. BeginXXX를 데스크톱에서 호출 할 때 콜백은 BeginXXX를 호출하는 스레드와 다른 스레드에 의해 호출되거나 호출되지 않을 수 있습니다. (내가 읽었으며 실험 한 ThreadPool에서 가져옴)
Windows CE에서 BeginXXX를 호출하면 BeginXXX를 호출 한 스레드가 콜백을 처리합니다.
정확합니까? 그렇다면 어디에서 설명서를 찾을 수 있습니까? STW는 도움이되지 않았고 RTM도 도움이되지 않았습니다.
이것은 충분한 이유가 문서화되어 있지 않기 때문에 I/O 완료 스레드에서 콜백을 수행 할 수 있다고 가정해야합니다. 단축키는 허용되지 않습니다. 무시하면 문제가 발생할 수 있습니다. 충분한 데이터가 버퍼링 될 때 발생하는 동일한 스레드에서 콜백을 확실히 얻을 수 있습니다. 아마 느린 CPU를 가진 장치에서 일어날 가능성이 있습니다. –
@HansPassant '는 I/O 완료 스레드에서 콜백을 수행 할 수 있다고 가정합니다. IO가 동기식으로 진행되거나 '경고 가능한'호출을해야하는 경우가 아니라면 발신 스레드가 콜백을 실행하도록 신호를받을 수있는 방법을 알 수 없습니다. 원래 스레드는 콜백 시간에 사용 중이거나 어쩌면 존재하지 않을 수도 있습니다. –
문서화하지 않는 것이 좋은 이유가있을 것이라고 상상할 수 없습니다. 내 응용 프로그램은 BeginReceive가있는 소켓에서 메시지를받습니다. Send()를 사용하여 명령을 보냅니다. 보낸 명령으로 인해 '확인'이 비동기로 수신됩니다. 괜찮 으면 나도 기다려야 해. ManualResetEvent를 사용하여 WaitOne() 명령을 실행 한 다음 OK를 누릅니다. 이것은 항상 타임 아웃되고 타임 아웃 중에는 소켓에서 아무것도 얻지 못합니다. 재설정 이벤트가 실패하면 OK가 표시됩니다. 내가 설명 할 수있는 유일한 방법은 호출 스레드가 BeginReceive에서 콜백을 처리 할 것으로 예상되는 스레드인지 여부입니다. –