DAY>Ставишь ли ты явно таймауты ? если нет то почитай в MSDN статью "Configuring Time-Outs"
ставлю, ставлю явно. вот последний вариант. перепробовано много вариантов установки структуры COMMTIMEOUTS
COMMTIMEOUTS ctmoCommPort;
if(!GetCommTimeouts(hComPort, &ctmoCommPort)) return GetLastError();
ctmoCommPort.ReadIntervalTimeout = MAXDWORD;
ctmoCommPort.ReadTotalTimeoutConstant = 1;
ctmoCommPort.ReadTotalTimeoutMultiplier = 1;
ctmoCommPort.WriteTotalTimeoutConstant = 0;
ctmoCommPort.WriteTotalTimeoutMultiplier = 0;
if(!SetCommTimeouts(hComPort, &ctmoCommPort)) return GetLastError();
Еще ошибки нет, когда читаю по 1 байту, т.е. по приходу 1 байта на порт сразу его забираю
Примерно так читаю (много кода уже порезал...)
DWORD CComPort::ReadFromPort(LPCVOID buffer, DWORD lenght)
{
if(!hComPort) return -1;
DWORD Tmp = 0;
DWORD Cnt = 0;
memset((void*) buffer, 77, lenght); // debug
byte *pB = (byte*) buffer;
byte p = 0;
while(Cnt < lenght)
{
DWORD res = ReadFile(hComPort, &p, 1, &Tmp, NULL);
// Sleep(10);
if(Tmp)
{
pB[Cnt] = p;
Cnt +=Tmp;
}
};
return 0;
}