überflüssige Events stornieren? (WaitForMultipleObjects)



  • Hi,

    Mit WaitForMultipleObjects warte ich auf Daten die über die Com-Schnittstelle reinkommen.
    Die Anzahl der Bytes, die ich empfangen werde, ist mir von Anfang an bekannt.
    Anhand dieser Byte-Zahl lasse ich meine Schleife laufen und lese vom Port.

    Das Gerät, welches mir die Daten schickt, schreibt mit Verzögerungen.
    Macht intern folgendes:

    write(Data-Part1)

    DO STH.

    write(Data-Part2)

    Ich will vom Puffer sowohl Data-Part1, also auch Data-Part2 gleichzeitig auslesen.

    1. WaitForMultipleObjects signalisiert bei Empfang von Data-Part1
    2. Ich lese vom Puffer alle Daten in meiner Schleife, da mittlerweile Data-Part2 auch anliegt, wird es auch mitgelesen.
    3. Danach kommt nun das Problem,..WaitForMultipleObjects wird nochmal ausgelöst (wegen Data-Part2) obwohl ich Data-Part2 schon beim ersten mal ausgelesen habe.

    Wie kann ich dieses erneute signalisieren stornieren?


  • Mod

    Du könntest manuel selbst mit ResetEvent, den Event löschen, nachdem Du Part2 auch empfagen hast. Das Problem ist aber: Was ist, wenn Deien andere Applikaiton auch schon wieder Part1 Daten gesendet hat?

    Dein Algorithmus ist einfach falsch.
    Du solltest imer auf Daten per Event warten! Und gemäß des Protokolles, das Du hast (Anzahl Daten, Part1 und Part2) in den entsprechenden neuen Wartezustand übergehen.
    Der Event zeigt einfach an: Seit dem letzten Warten sind Daten eingegangen.
    Du könntest ja auch direkt wieder für den Part2 einen Warteprozess anstossen. Sind die aten da, kehrt das System sowieso gleich zurück und der Event ist gelöscht.



  • Bei einem Event entnehme ich die Daten und lege diese in eine Art Stack, welches vom anderen Programmteil (Thread) abgeholt und verarbeitet wird.
    Wenn nun die Daten nicht komplett vorliegen,.. ist das ein Problem für mich.
    Der Thread guckt zyklisch in diesem Stack nach ob irgendwas vorhanden ist, wenn ja entnehmen und verarbeiten.
    Ich muss gucken, dass die Daten vollständig für den Thread vorliegen und nicht Teile davon.

    Deine Erläuterung verstehe ich auch...daran hab ich schon gedacht....
    Es könnte beim löschen der "unwichtigen" Events ein "wichtiges" Event mitgelöscht werden.


Anmelden zum Antworten