async~ ReadFile example

0

jak wywolam ReadFile na pliku otwartym z FILE_FLAG_OVERLAPPED to zawsze zwraca false (blad), w prawdzie GetLastError() zwraca IO_PENDING, ale dlaczego readfile zwraca 0? Przeciez skoro zadanie polecialo do wykonania, dlaczego zwraca 0?
Czy zawsze tak jest? Co jesli zwroci 1 (czy jest to mozliwe?)?
Jesli zwroci 1, to bede musial zalozyc ze operacja zostala wykonana natychmiast?

Jak powinna wyglodac obsluga tego, to jest dosc skomplikowane i sie gubie.

  1. resetuje event z OVERLAPPED
  2. wywoluje readfile
  3. jesli zwroci 0 i GetLastError zwroci IO_PENDING, ok, jesli nie - blad.
  4. jesli nie ma bledu, kontynuowac lub zablokowac Waitem
  5. jesli jest blad, lub readfile zwrocilo 1 - czyli nie ma bledu, co?
0

ReadFile may return before the read operation is complete. In this scenario, ReadFile returns FALSE and the GetLastError function returns ERROR_IO_PENDING, which allows the calling process to continue while the system completes the read operation.

may znaczy moze. wiec nie wiadomo, lepiej nic nie zakladac. Trzeba uzywac readfileex gdzie po kazdej operacji io uruchamia funkcje.

0

jesli readfile zwroci true znaczy ze w buforze mam dane, tyle ile chcialem miec.
zawsze.

teraz tylko kwestia realizacji i/o.
czy readfile czeka az watek wejscie w wait state i wtedy sie przelacza, czy tylko wrzuca do kolejki i juz inny dzialajacy w ring0 to robi i jedynie zwraca wynik to mojego watku. tego nigdzie NIE MA.

1 użytkowników online, w tym zalogowanych: 0, gości: 1