Events empfangen!



  • 2 verschiedene Programme und Funktionspointer ^^ 😕

    @Jenny

    Welches OS verwendest Du denn ?



  • Ach, was ich vergessen hatte zu erwähnen ist dass ich das zweite Programm gar nicht modifizieren kann, ich verfüge nicht über den Quellcode, est ist nur eine exe Datei. Ich kann nur über eine DLL Schnittstelle darauf zugreifen. Also weiss ich in Prinzip gar nicht ob das, was ich mit dem Events erreichen will überhaupt realisierbar ist.

    Die Sache ist nur, wenn ich eben auf diesem Knopf drücke, wird eine zweite Instanz vom Wächter erzeugt obwohl eine schon aktiv ist. Kommunizieren tut das Programm aber mit der erste Instanz des Wächters, komischerweise. Deswegen dachte ich, irgendwie schafft das Programm zu merken wenn sich etwas verändert, ich weiss bloß nicht wie.

    Das sind die Parameter mit dem ich das Programm calc, in der main(...)-Methode meine Wächter-Klasse initialisiere, mit Hilfe des Konstruktors von calc:

    const DWORD dwFlags = MANUALINIT
    LPCTSTR Name const = "calc"
    UINT uSharedMemorySize = NULL
    const DWORD dwTimeout = INFINITE
    const TimeoutHookProc timeoutHookProc = NULL
    void *const pVoid = NULL

    dann rufe ich Init(); Hier bleibt das Programm erst stehen, ich weiss nicht wieso.

    dannach rufe ich diverse Methode der Schnittstelle auf, bis zum den Punkt kommt das Programm aber bei der erste Instanz nicht, da es bei Init stehen bleibt.

    Wenn ich jetzt aber in calc mit Hilfe des Knopfes eine zweite Instanz vom Wächter starte, wird die Methode Init in der erste Instanz (also im ersten DOS Fenster) endlich zu Ende ausgeführt und die weitere Schnittstellen-Methoden aufgerufen.
    Blöderweise habe ich aber jetzt das DOS-Fenster der zweite Schnittstelle, die ich nicht brauche und die ihrerseite auch bei Init stehen bleibt.

    Ich weiss, es ist ein bißchen verwirrend, aber leider komme ich überhaupt nicht weiter. Ich habe früher nur Java programmiert, und verstehe noch nicht ganz, diese ganze Abläufe bei C++. Wäre sehr dankbar für jede Hilfe.

    Was war eigentlich mit OS gemeint?



  • Betriebssystem (Operating System) war damit gemeint.



  • Standard C++ kümmert sich nicht um den Austausch von Daten zwischen mehreren Prozessen. Da du offensichtlich Windows verwendest, passt deine Frage auch besser ins WinAPI Forum.



  • JennyFromTheBlock schrieb:

    Ich habe zwei Programme die miteiander kommuniezieren sollen.
    Das erste Programme ist eine Art Wächter der die ganze Zeit aktive sein soll und lauscht ob sich etwas beim zweiten Programm verändert hat. Der Wächter soll also Events vom zweiten Programm abfangen.

    das problem ist nicht gerade ein c++-problem. eher eines deines betriebssystems. interprozesskommuniekation geht so allein in c++ nicht richtig. außer mit kommunikation über dateien oder programmaufrufe. sag also, welches bs du hast und der thread wird dahingeschoben. dann können wir ganz konkret werden.

    da du gerade das wort Event verwendet hast. ja, bei mancen BSen gibt es events. oder semaphoren, pipes, shared memory und noch ähnliche dinger.

    bei deienem problem müßte ich mehr wissen.

    ist das event sowas wie "klappe ist auf" oder "Klappe ist zu"? dann ist ein event ideal. also wenn nur ein status bekannt sein muß.

    sind die statusänderunen selbst wichtig, dann sind semaphoren angesagt. die zählen mit. man kann z.b. 5 statusänderungen schicken ubd der empfänger arbeitet dann auch 5 ab.

    sind daten mitzuschicken, könnten pipes gut sein.

    und statt pipes kann man natürlich auch über tcp-ip miteinander reden.

    beispielpseudocode für semaphoren:

    int sendermain()
    {
       Semaphore sema("eindeutigername");
       sema.signal();
    }
    int empfängermain()
    {
       Semaphore sema("eindeutigername");
       for(;;)
       {
          sema.wait();
          cout<<"der sender hat mir bescheid gesagt"<<endl;
      }
    }
    


  • Ich verwende MS Windows 2000 Professional.



  • Geht es dir darum Nachrichten an die andere Anwendung zu schicken, oder was genau hast du vor 😕 Hast du Konsolenanwendungen?



  • Nun ich möchte über die Schnittstelle Werte auslesen, die brauche ich für eine Konsistenzprüfung, und dann will ich einfach 0 zurückgeben falls alles in Ordnung ist. Ja z.Z ist es eine Konsoleanwendung.



  • Allerdings will ich die Werte erst auslesen nachdem, ein bestimter Knopf gedrückt worden ist. Deswegen die Frage mit den events.




Anmelden zum Antworten