Frage

Ich mag ein Datum mit mehreren Prozessen teilen. Mein erster Versuch ist Punkt-zu-Punkt-Nachrichtenwarteschlange mit mehreren Lesern verwenden da ich gelesen, dass P2P Msg Queue sehr schnell ist.

Während meines Tests scheint es, wie mehrere Leser aus der gleichen Warteschlange lesen und einmal eine Nachricht abgerufen wird von einem Leser, andere Leser die gleiche Nachricht nicht abholen können, zu.

Was ist eine bessere IPC für Daten auf mehrere Prozesse zu teilen? Die Daten werden häufig aktualisiert (mehrmals pro Sekunde), damit ich denke, WM_COPYDATA ist keine gute Wahl und werde mit der „normalen“ Message Queue stören.

Mein zweiter Versuch wird wahrscheinlich ein gemeinsam genutzter Speicher + Mutex + Ereignisse

War es hilfreich?

Lösung

Punkt-zu-Punkt-Warteschlangen werden gut funktionieren. Ja, wenn Sie senden, nur ein Empfänger erhält die Nachricht und der Absender die Warteschlange abfragen kann (durch den Aufruf von GetMsgQueueInfo ), wie viele Zuhörer (wNumReaders Mitglied der MSGQUEUEINFO ) gibt es und wiederholen Sie einfach die Nachricht, dass einige Male.

Andere Tipps

  

Schließlich ist es durchaus möglich, mehr als ein Thread oder Prozess die gleiche Warteschlange für den Lesezugriff zu öffnen oder für den Schreibzugriff. Punkt-zu-Punkt-Nachrichtenwarteschlangen unterstützen mehrere Leser und mehrere Autoren. Diese Praxis ermöglicht es zum Beispiel ein Schriftsteller Prozess Nachrichten an mehrere Client-Prozesse oder mehrere Schreiber Prozesse zum Senden von Nachrichten an einen einzelnen Leser Prozess senden. Es gibt jedoch keine Möglichkeit, eine Nachricht an einen bestimmten Leser Prozess zu adressieren. Wenn ein Prozess oder ein Thread, um die Warteschlange liest, wird die nächste verfügbare Nachricht lesen. Es gibt auch keine Möglichkeit, eine Nachricht an mehrere Leser zu übertragen.

     

Programmierung Windows Embedded CE 6.0-Entwicklerreferenz, vierte Auflage, Douglas Boiling, Seite 304

Trotz der Warnung, ctacke IDE scheint für meine Anwendungsfälle in Ordnung zu sein.

Caveat:
Meine Warteschlange Leser müssen Sleep(10), nachdem sie ihren Anteil an der Nachricht holen andere Leser zu erlauben, Nachrichten zu gehen und zu holen. Ohne Sleep() wird nur ein Leser Prozess signalisiert vom Warten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top