Evenimentele sunt și ele distincte? On Fri, May 15, 2020, 16:44 Dorin Geman <dorin.ge...@rosedu.org> wrote:
> Din păcate, aceeași problemă. > Am modificat ca ReadFile să folosească un OVERLAPPED diferit, însă nu s-a > schimbat nimic. > ReadFile întoarce FALSE și GetLastError() == ERROR_IO_PENDING și rămâne > agățat acolo, nu primesc eveniment pe structura OVERLAPPED dată ca > parametru. > > On Fri, May 15, 2020 at 4:21 PM Dorin Geman <dorin.ge...@rosedu.org> > wrote: > >> Awesome, mersi! >> >> On Fri, May 15, 2020 at 4:08 PM Paul Olaru <olarupaulstelia...@gmail.com> >> wrote: >> >>> 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 >>> <https://docs.microsoft.com/windows/desktop/api/synchapi/nf-synchapi-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 <https://go.microsoft.com/fwlink/?LinkId=550986> for >>> Windows 10 >>> >>> >>> >>> *From: *Dorin Geman <dorin.ge...@rosedu.org> >>> *Sent: *Friday, May 15, 2020 3:53 PM >>> *To: *Paul Olaru <olarupaulstelia...@gmail.com> >>> *Cc: *Sisteme de Operare <so@cursuri.cs.pub.ro> >>> *Subject: *Re: [so] [Tema5][Windows] ReadFile + WSAOVERLAPPED >>> >>> >>> >>> >>> >>> *From: *Dorin Geman via so <so@cursuri.cs.pub.ro> >>> *Sent: *Friday, May 15, 2020 3:35 PM >>> *To: *Sisteme de Operare <so@cursuri.cs.pub.ro> >>> *Subject: *[so] [Tema5][Windows] ReadFile + WSAOVERLAPPED >>> >>> >>> >>> Salutare, >>> >>> >>> >>> Am o mică nelămurire. >>> >>> Am citit că structurile OVERLAPPED și WSAOVERLAPPED sunt compatibile, >>> deci pot folosi un WSAOVERLAPPED la ReadFile. Cu toate acestea, dacă în >>> funcția aferentă unui structuri ov apelez ReadFile cu parametru aceeași >>> structura ov, programul rămâne blocat pentru că nu mai primesc eveniment pe >>> acea structură. >>> >>> Fișierul este deschis cu FILE_FLAG_OVERLAPPED. >>> >>> >>> >>> Mersi anticipat și o zi frumoasă, >>> >>> Dorin Geman >>> >>> >>> >>> On Fri, May 15, 2020 at 3:41 PM Paul Olaru <olarupaulstelia...@gmail.com> >>> wrote: >>> >>> Nu cred că e vorba de o problemă de compatibilitate între OVERLAPPED și >>> WSAOVERLAPPED, ci mai degrabă >>> >>> e o problemă de reutilizare. 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. >>> >>> >>> >>> Folosește o structură OVERLAPPED separată. >>> >>> >>> >>> Sent from Mail <https://go.microsoft.com/fwlink/?LinkId=550986> for >>> Windows 10 >>> >>> >>> >>> Ș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