DLL-Client benachrichtigen wenn Thread Daten bereitgestellt hat



  • Hallo Leute.

    Ich bin auf der Suche nach einem Ansatz, der mir bei meinem Projekt weiterhelfen kann.

    Zuerst ein paar Worte zu meinem Projekt und dessen Aufbau. Ich habe eine DLL, die in reinem C++ geschrieben ist und soweit wie es geht plattformunabhängig sein soll, programmiert. (Komplett plattformunabhängig soll sie letztlich nur durch den Präprozessor werden, aber das soll hier erst mal keine Rolle spielen.)
    In dieser DLL gibt es einige Funktionen die als C-Funktionen exportiert werden, damit ein Anwenderprogrammen auf diese Funktionen zugreifen kann.
    Innerhalb der DLL läuft nach der Initialisierung ein Thread der Daten von einem Mikrocontroller holt. Zur Veranschaulichung hab ich mal eine Grafik angehängt. (Es können auch mehrere Threads laufen, je nach Anzahl der Geräte, die Daten liefern.)

    Aufbau DLL

    Aus einem Anwenderprogramm (momentan C++/CLI) heraus, welches die DLL nutzt, möchte ich nun eine Anforderung an die DLL schicken, damit der Thread spezielle Daten aus dem Mikrocontroller lädt. Soweit ist das ja kein Problem. Dazu hab ich mir eine Funktion geschrieben die die Umgebungsvariablen des Thread speziell manipuliert, so dass dieser weiß, das spezielle Daten gefordert sind und diese im nächsten Durchlauf besorgt.
    Da ich aber nicht mit Sicherheit sagen kann wann der Thread die Daten geholt, aufbereitet und zur Verfügung gestellt hat, möchte ich nun eine Benachrichtigung (oder vielleicht was anderes) einbauen, in der der Thread (oder jemand anderes in der DLL) meldet, dass die Daten angekommen sind und zur Abholung bereit stehen (um sie im einfachsten Falle visuell darzustellen)

    Nun hab ich bei diesem Ansatz diverse Probleme.
    Zum einen stelle ich mir die Frage, wer bekommt die Benachrichtigung?
    Das Anwenderprogramm? -> blöd, da es in verschiedenen Sprachen und auf verschiedenen Plattformen realisiert sein könnte.
    Die DLL? -> Wie benachrichtige ich dann das Anwenderprogramm?

    Ist der Ansatz überhaupt richtig, oder gibt es andere Möglichkeiten ohne Benachrichtungen (Messagequeues)?

    Auf "aktives Warten" möchte ich Verzichten!

    Danke für eure Tipps und Hilfestellungen

    Grüße
    Daimonion



  • Nun ja, nach einigem Überlegen, werde ich nun mal eine Callbackfunktionalität vorsehen. Aber momentan ist das Projekt eh auf Eis gelegt.

    Grüße
    Daimonion


Anmelden zum Antworten