Nu am un exemplu clar dar o chestie indirectă e următorul citat: A common mistake is to reuse an OVERLAPPED structure before the previous asynchronous operation has been completed. You should use a separate structure for each request. You should also create an event object for each thread that processes data. If you store the event handles in an array, you could easily wait for all events to be signaled using the WaitForMultipleObjects function. O structură OVERLAPPED e asociată unei singure cereri, iar cererea trebuie să fie completă, să se termine, înainte de a putea reutiliza structura. O structură OVERLAPPED poate asculta doar pentru un eveniment și apoi trebuie reconfigurată; dacă e reconfigurată înainte ca cererea anterioară să se termine o să pierzi evenimentul din acea cerere anterioară. Practic când refolosești un OVERLAPPED, cea mai recentă configurație e cea care are efect, dar în timpul celei mai recente configurații trebuie ca toate câmpurile nefolosite să fie resetate. În handler-ul evenimentului unui OVERLAPPED, acel OVERLAPPED încă nu e ok pentru reutilizare pentru că Win32 încă îl folosește tocmai pentru a-ți triggerui evenimentul. Acel trigger este sincron. După ce ieși din handler structura poate fi reutilizată. So. Folosește structuri OVERLAPPED/WSAOVERLAPPED (după cum ai spus sunt compatibile deci folosești structura care are sens cu o anumită operație) separate pentru operațiile I/O concurente, cu considerentul că handlerul de completion face parte din operația de I/O. Păstrează un OVERLAPPED pentru fișier și altul pentru socket. Sigur, între cereri poți să le refolosești just fine. Nu e nevoie de documentație ca să încerci acest fix și să observi că merge. Sent from Mail for Windows 10 From: Dorin Geman
On Fri, May 15, 2020 at 3:41 PM Paul Olaru <olarupaulstelia...@gmail.com> wrote:
Și totuși, la TransmitFile merge să folosesc aceeași structură și la următorul eveniment să închid conexiunea. Can you provide some further reading? Related to ``` Structura OVERLAPPED e deja activă în callback-ul aferent și nu e o idee bună să o refolosești când este deja activă – you’re going to cause confusion if not worse. ``` Mersi fain, Dorin Geman |
_______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii