TimeOut bei Serieller Schnittstelle
-
Hallo,
ich benutze eine Routine zum Lesen/Schreiben auf die RS232 ähnlich wie unten stehend.
Beim Lesen von der Schnittstelle möchte ich immer nur ein Zeichen einlesen. Deswegen wurde die Länge bei ReadFile auf 1 gesetzt. Das funktioniert soweit so gut. Wenn nun kein Zeichen kommt, wartet ReadFile ewig auf das Zeichen und blockiert den Rest.
Wie kann ich ein TimeOut einfügen?
Grüße//ÖFFNEN
HANDLE Port; // steh bei mir in der Header
DCB PortConfig;
Port = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if(GetCommState(Port,&PortConfig) == 0)
{
//hier fehlerbehandlung
return;
}
PortConfig.BaudRate = CBR_9600;
PortConfig.StopBits = ONESTOPBIT;
PortConfig.Parity = NOPARITY;
PortConfig.ByteSize = 8;
if(SetCommState(Port,&PortConfig) == 0)
{
//hier error;
}//SENDEN
unsigned long length = 0;
CString sDaten = "hallo ich bin eine Nachricht";
if(WriteFile(Port, sDaten, sDaten.GetLength(), &length,NULL) == 0)
{
//hier fehlerbehandlung
return;
}
-
Ich hatte den egalen Problem. Sie mussen folgende Zeilen einfügen:
COMMTIMEOUTS to;
to.ReadIntervalTimeout = 1;
to.ReadTotalTimeoutConstant = 1;
to.ReadTotalTimeoutMultiplier = 2;
to.WriteTotalTimeoutConstant = 1;
to.WriteTotalTimeoutMultiplier = 2;
SetCommTimeouts (m_hcom, &to);Mehr in MSDN.
Fredy