Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool SpdController::read(void *buf, size_t len)
- {
- if (!opened)
- return false;
- OVERLAPPED op;
- ZeroMemory(&op, sizeof(op));
- op.hEvent = CreateEvent(nullptr, false, false, nullptr);
- DWORD dwBytesReturned = 0;
- ULONG dwError = NOERROR;
- dwError = ReadFile(hDevice, buf, len, &dwBytesReturned, &op) ? NOERROR : GetLastError();
- if (dwError == ERROR_IO_PENDING) {
- // Ждем завершения чтения
- dwError = GetOverlappedResultEx(nullptr, &op, &dwBytesReturned, 500, FALSE) ? NOERROR : GetLastError();
- if (dwError != NOERROR) {
- // Таймаут вылетел или совсем всё плохо
- CancelIo(hDevice);
- CloseHandle(op.hEvent);
- return false;
- } else {
- CloseHandle(op.hEvent);
- return true;
- }
- } else {
- CancelIo(hDevice);
- CloseHandle(op.hEvent);
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement