ReadFileEx blokuje :(

0

probuje rozgryzc jak dziala overlapped io i natrafilem na kolejny problem.

readfielex blokuje jak chce czytac od EOF. tzn 0 bajtow, tylko eof.
powinno zwrocic Od razu, a tak nie jest.

ogolnie to zwraca tylko raz, tylko 1 sie wykonuje callback.

dalej tego nie rozumiem, help ;/

#include <windows.h>

HANDLE a;
OVERLAPPED ov;
DWORD w;

VOID CALLBACK cr(DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped){

printf("error: %i, trans: %i\r\n", dwErrorCode, dwNumberOfBytesTransfered);

//GetOverlappedResult(a, lpOverlapped, &w, 0);
//printf("GLA: %i\r\n", GetLastError());

SetEvent(lpOverlapped->hEvent);

return;
}

int main(){


char buff[1024*1024];

a = CreateFileW(L"c:\\test.txt", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, 0, OPEN_ALWAYS, 0, 0);



ZeroMemory(&ov, sizeof(OVERLAPPED));
ov.hEvent = CreateEvent(0, 1, 0, 0);

memset(buff, 'A', sizeof(buff));


while(1){
ResetEvent(ov.hEvent);
printf("%i\r\n", ReadFileEx(a, buff, 3, &ov, cr));
printf("%i\r\n", GetLastError());

WaitForSingleObjectEx(ov.hEvent, -1, 1);

puts("");
}



return 0;
}
0

nie ustawilem flagi overlapped, teraz dziala.

ale dalej Wait~ bloczy jak readfileex zwroci 0.
no to pokombinuje jak musze obslugiwac bledy readfileex.
jesli 1 - ok, przejsc do next deskryptora, jesli 0 - wywalic deskryptor, lub manualnie ustawic event.

nie wiem.

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