Advertisement
glavmonter

hid

Nov 8th, 2021
599
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.97 KB | None | 0 0
  1. bool SpdController::read(void *buf, size_t len)
  2. {
  3.     if (!opened)
  4.         return false;
  5.  
  6.     OVERLAPPED  op;
  7.     ZeroMemory(&op, sizeof(op));
  8.     op.hEvent = CreateEvent(nullptr, false, false, nullptr);
  9.     DWORD dwBytesReturned = 0;
  10.     ULONG dwError = NOERROR;
  11.     dwError = ReadFile(hDevice, buf, len, &dwBytesReturned, &op) ? NOERROR : GetLastError();
  12.     if (dwError == ERROR_IO_PENDING) {
  13.         // Ждем завершения чтения
  14.         dwError = GetOverlappedResultEx(nullptr, &op, &dwBytesReturned, 500, FALSE) ? NOERROR : GetLastError();
  15.         if (dwError != NOERROR) {
  16.             // Таймаут вылетел или совсем всё плохо
  17.             CancelIo(hDevice);
  18.             CloseHandle(op.hEvent);
  19.             return false;
  20.         } else {
  21.             CloseHandle(op.hEvent);
  22.             return true;
  23.         }
  24.     } else {
  25.         CancelIo(hDevice);
  26.         CloseHandle(op.hEvent);
  27.         return false;
  28.     }
  29. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement