Zwei Prozesse miteinander kommunizieren lassen



  • Hallo allerseits,

    ich entwickle gerade eine einfache Applikation (app1) welche mit einer anderen Applikation (app2, ebenfalls von mir) Daten austauschen soll. app2 ist quasi ein Untermodul von app1 (Wird aber als eigenes Exe-File geführt was auch so bleiben soll) app2 kann auch mehrfach von app1 aufgerufen werden.

    Die Kommunikation soll dabei über Tcp (localhost) laufen, allerdings befürchte ich das mir die Connection-handles für eine konstante Verbindung über Tcp ausgehen könnten da app2 in einer unbestimmten Anzahl aufgerufen werden soll. Weiters bin ich mir auch nicht sicher wie "konstant" so eine Verbindung mit Localhost sein kann (Mir ist bewußt das es die eigene Maschine ist 😉

    Nachdem ich mit dieser Thematik (IPC) noch nicht so vertraut bin und auch Google meine Frage nicht beantworten kann hoffe ich das ihr vielleicht weiterhelfen könnt?

    Mir würden da schon einige Erfahrungswerte genügen. Wie machen das andere Programme? Wie funktioniert hier der Datenaustausch? Shared Memory ist eine Option allerdings sollten die Apps auch unter Linux laufen ohne das ich den gesamten IPC-Mechanismus umschreiben muss.

    Beide Programme sollen so transparent wie möglich zusammenarbeiten, der Benutzer soll dabei auch nicht merken das es sich um unterschiedliche Applikationen handelt. Vielleicht könnt ihr mir ja mittels einer Antwort bei dieser Design-Entscheidung helfen 😉

    Danke!
    Andy



  • Hallo,
    das sieht mir nach unglücklichem Softwaredesign aus
    mach lieber app2 zum Thread von app1.
    mfg.



  • Hallo,
    Danke für die Antwort. Glücklich bin ich mit dem Design auch nicht 😉

    app1 weiß aber in Wirklichkeit gar nichts von app2 sondern kennt nur das Exe-File welches es starten soll (Mögliche app3, app4, ... sind vom Aufbau her gleich wie app2 und durch den modularen Aufbau sollen sie auch austauschbar sein bzw. auch verkettet werden können). Ich kann deshalb keinen Code von app2 in app1 einbauen.

    Über DLL's kann ich die Sache leider auch nicht lösen da ich als Gui-Platform wxWidgets verwende und Gui-Aufrufe aus der DLL heraus die komplette Applikation abstürzen lassen (Allerdings habe ich das vor langer Zeit mal probiert gehabt, vielleicht gibt es ja seitdem neue Möglichkeiten)

    lg
    Andy



  • die module app2, app3, app4 ... programmierst du auch selbst?
    wenn ja, kannst du sie doch als thread innerhalb von app1 starten lassen.



  • Ja, die programmiere ich auch selbst und ich könnte tatsächlich alle Codeteile zusammenpacken und mit Thread's arbeiten. Ich verliere dann aber den modularen Aufbau welcher entscheidend für das Projekt ist.

    lg
    Andy



  • noooooo! nononoooooohohoooo!
    nein, den modularen aufbau brauchst du nicht aufzugeben!
    unter modularem aufbau versteht man im allgemeinen ja auch nicht das verstreuen eines programms in einzelne exe dateien 🤡 *scnr*

    lg,
    josef



  • Der Source selbst wurde weitgehenst modular und wiederverwendbar gehalten. ich meinte den modularen Aufbau aus Usersicht, d.h. der User soll app2, app3, .... usw. wahlfrei verwenden können ohne das app1 wissen muß was eigentlich hinter diesen Applikationen (app2, ...) steckt.

    Zukünftig sollte es auch möglich sein das diese Module von anderen Entwicklern erstellt und kompiliert werden (ohne das das Hauptmodul neu-/mitkompiliert wird!)

    Die Basis (app1) möchte ich ab einem bestimmten Zeitpunkt nicht mehr verändern und es sollte auch möglich sein das Module in unterschiedlichen Programmiersprachen entwickelt werden.

    Ursprünglich waren app2, app3, ... ja in DLL's gepackt und solange ich keine GUI-Elemente (wxWidgets) aus den DLL's verwendet hatte funktioniert auch alles wunderbar. Da app2 usw. nun aber auch grafische Ausgaben erzeugen (kleinere Dialoge) musste ich auf eigene Prozesse ausweichen. Die Gui-Library kann ich leider nicht ändern und zwecks Einheit/Darstellung sollten auch "Module" diese verwenden.

    Na vielleicht finde ich ja bald eine brauchbare Lösung. Werd's dann hier posten
    Danke an alle!
    lg
    Andy



  • Wäre da nicht vielleicht wirklich ein lokaler Server hilfreich? Damit kannst du ziemlich viel abdecken.


Anmelden zum Antworten