Frage zum Abfangen eines Events



  • Hallo Zusammen!

    Ich benutze ein CAN-Interface und Kommuniziere mit einem Messgerät.

    Softwaremäßig stehen mir Funktionen wie Read und Write zur verfügung, mit denen ich den Sende- und Empfangspuffer lesen bzw. füllen kann.

    Nun zu meinem Problem:
    über eine spezielle Funktion kann ein Event ausgelöst werden, welches mir signalisiert, dass das Interface eine Nachricht erhalten hat vom Messgerät.
    Nun möchte ich dass mein Programm auf dieses Event reagiert und den aktuellen Abfragezyklus unterbricht (der Abfragezyklus erfolgt in einem Thread) und die Nachricht abholt.

    Es gibt die Möglichkeit mit der Windowsfunktion WaitForSingleObject auf solch ein Event zu reagieren, nur möchte ich nicht noch einen weiteren Thread benutzen, in der diese Funtkion permanent aufgerufen werden muss.

    Ich suche eher eine Möglichkeit, die so ähnlich funktioniert wie ein ClickEvent
    auf einem Button.

    Hat mir jemand einen Hinweis oder Tipp, um auf die richtige Spur zu kommen?

    Vielen Dank



  • mr_crabs schrieb:

    Es gibt die Möglichkeit mit der Windowsfunktion WaitForSingleObject auf solch ein Event zu reagieren, nur möchte ich nicht noch einen weiteren Thread benutzen, in der diese Funtkion permanent aufgerufen werden muss.

    Solltest du aber. Das ist die richtige Lösung. Der Thread kann dann eine Window-Message an dein Formular senden oder auf andere Art dem Primärthread signalisieren, daß das Event eingetreten ist.

    Von "permanent aufrufen müssen" kann ohnehin keine Rede sein, denn WaitForSingleObject() tut genau das, was der Name sagt - warten, bis das Event eintritt.



  • Eigentlich brauchst Du keinen Abfragezyklus mehr, wenn Du auf Events reagierst. Dein aktueller Abfragethread könnte also eingespart werden und Du bräuchtest dann nur noch den, der an WaitForSingleObject blockiert.



  • vielen Dank erst mal für die schnelle Hilfe.

    Wenn ich die Funktion WaitForSingleObj benutze und die Wartezeit auf "INFINITE" einstelle und diese Funtkion in einem Thread aufrufe, dann wird doch dieser Thread so lange angehalten bis ein Event eintritt?

    Ich benutze einen Thread, der das Messgerät auf Daten anfrägt, immer zyklisch und immer in der gleuchen Reihenfolge. Sobald das Messgerät die Antwort zurücksendet, möchte ich dass ein Event diesen Thread kurz unterbricht, um die Antwort auszuwerten bzw. zu speichern und dann an der Stelle weiter machen.

    Nun muss ich wohl einen zweiten Thread benutzen, in dem WaitForSIngleObject aufgerufen wird, oder gibt es eine andere Möglichkeit?


Anmelden zum Antworten