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


Anmelden zum Antworten