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