[so] [Tema5][Windows] ReadFile + WSAOVERLAPPED

Dorin Geman dorin.geman at rosedu.org
Fri May 15 16:21:57 EEST 2020


Awesome, mersi!

On Fri, May 15, 2020 at 4:08 PM Paul Olaru <olarupaulstelian97 at 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.geman at rosedu.org>
> *Sent: *Friday, May 15, 2020 3:53 PM
> *To: *Paul Olaru <olarupaulstelian97 at gmail.com>
> *Cc: *Sisteme de Operare <so at cursuri.cs.pub.ro>
> *Subject: *Re: [so] [Tema5][Windows] ReadFile + WSAOVERLAPPED
>
>
>
>
>
> *From: *Dorin Geman via so <so at cursuri.cs.pub.ro>
> *Sent: *Friday, May 15, 2020 3:35 PM
> *To: *Sisteme de Operare <so at 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 <olarupaulstelian97 at 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
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20200515/e09babab/attachment-0001.html>


More information about the so mailing list