проблема класса устройства связи (CDC) с Read

Я пытаюсь использовать readfile функция для чтения данных с устройства CDC в среде WinCE.

BOOL WINAPI ReadFile(
_In_         HANDLE hFile,
_Out_        LPVOID lpBuffer,
_In_         DWORD nNumberOfBytesToRead,
_Out_opt_    LPDWORD lpNumberOfBytesRead,
_Inout_opt_  LPOVERLAPPED lpOverlapped
);

Я хотел бы знать, каков предел размера для readbuf, Я посылаю блок из 256 байтов данных за 100 раз, параметр lpNumberOfBytesRead от ReadFile возвращает 173 байта с первой попытки и 0 все остальные 99 раз. Пожалуйста, дайте мне знать, что мне не хватает. Кроме того, каков предел размера для writebuf? ниже приведен код для открытого порта

    BOOL PortOpen()
{
Close();

ComPort = INVALID_HANDLE_VALUE;
COMMTIMEOUTS ct;ComPort=CreateFile (TEXT("COM1:"), GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);if (ComPort != INVALID_HANDLE_VALUE) {

dcb.DCBlength = sizeof (dcb);
GetCommState (hLocal, &dcb);
dcb.BaudRate = 115200;
dcb.fParity = FALSE;
dcb.fNull = FALSE;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
dcb.ByteSize = 8;
SetCommState (ComPort, &dcb);ct.ReadIntervalTimeout = 0;
ct.ReadTotalTimeoutMultiplier = 0;
ct.ReadTotalTimeoutConstant = 0;
ct.WriteTotalTimeoutMultiplier = 0;
ct.WriteTotalTimeoutConstant = 0;
SetCommTimeouts (hLocal, &ct);

}

Liang

0

Решение

Тайм-ауты для операции ReadFile можно настроить с помощью API SetCommTimeouts. Вы уверены, что ваш код не вызывает его? В этом случае количество возвращаемых байтов может варьироваться в зависимости от установленных вами параметров времени ожидания.

0

Другие решения

Спасибо за ответ! моя проблема была решена.
WindowCE не поддерживает перекрывающийся ввод-вывод, чтение и запись должны быть в отдельном потоке. Также, чтобы избежать гонки, я использовал семафор.

Liang

0