Тайм-аут чтения файла для межбайтовой задержки

0

Я хочу, чтобы ReadFile() с устройством последовательной связи возвращался, когда был получен хотя бы один байт или время ожидания.

Поскольку я искал тайм-аут для ReadFile().

Большинство людей упоминают SetCommTimeouts() и overlapped I/O

Но SetCommTimeouts() не возвращается, байт получен, хотя и до таймаута.

И overlapped I/O(GetOverlappedResult) также не удовлетворяет моим требованиям. правильно?

И тем не менее я знаю, что GetOverlappedResultEx() похоже, поддерживает это, используя DWORD dwMilliseconds, я не хочу использовать функции серии EX.

Там в любом случае?

  • 0
    «Я не хочу использовать функции серии EX.»: Почему? Многие основные Win32 API заканчиваются на Ex .
  • 0
    Вы можете использовать функцию «select», с тайм-аутом, который затем возвращается, когда доступен символ или тайм-аут. он возвращает значение, которое указывает, что произошло.
Показать ещё 1 комментарий
Теги:
serial-port

1 ответ

0

Вы должны использовать асинхронную версию функции, указав FILE_FLAG_OVERLAPPED.

Когда тайм-аут достигнут, вы можете вызвать CancelIo с помощью дескриптора файла.

HANDLE hThread = CreateThread(NULL, 0, TizReadFile, tizHandle, 0, 0);
WaitForSingleObject(hThread, 2);
CancelIo(tizHandle);
...
DWORD WINAPI TizReadFile(HANDLE &tizHandle)
{
    DWORD dwRead = 0;
    if(0 == ReadFile(tizHandle, g_globalBuffer, dwWant2Read, &dwRead, 0))
        return GetLastError();
    return 1;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню