Kommunikation zwischen Prozessen



  • Ich starte per CreateProcess() einen Prozess. Er erzeugt gewisse Daten, wie kann ich aush meinem Elternprozess an diese Daten rankommen, also welche Wege der Kommunikation gibt es? Sowas wie Callback wäre nicht schlecht. Das einzige was mir so einfällt ist die Ausgabe am STDOUT abzufangen...
    Wobei es ziemlich viele Daten sind, d.h. ich müsste innerhalb einer Schleife ca. 5 mal in der Sekunde abfragen...



  • Man könnte das über Events und Nachrichten lösen.

    -> PostThreadMessage

    Gruß
    Horst



  • Shared Memory wäre eine weitere Möglichkeit.

    Rob'



  • Wie funktioniert das mit SharedMemory?

    @Horst
    Wie teile ich meinem Kinderprozess die ThreadID mit, an die die Nachrichten gesendet werden sollen? Könnte man das über Kommandozeilenparamter machen, also die ThreadID als String übergeben und danach in DWORD umwandeln???



  • Wenn Du statt CreateProcess() CreateThread() verwendest, kannst Du einen Pointer auf Daten oder Datenstruct mitgeben, die die ThreadID enthalten. Und dann kann man mit PostThreadMessage() Daten nicht nur zurück, sondern auch hinsenden.

    Blackbird



  • zufaulzumeinloggen schrieb:

    Wenn Du statt CreateProcess() CreateThread() verwendest, kannst Du einen Pointer auf Daten oder Datenstruct mitgeben, die die ThreadID enthalten. Und dann kann man mit PostThreadMessage() Daten nicht nur zurück, sondern auch hinsenden.

    Blackbird

    Mit CreateThread kann man doch kein Programm starten 😕 😕 😕 😕





  • Mit CreateFileMapping, MapViewOfFile, usw. Ich habe es benutzt, um eine DLL zu schreiben, wo alle aufrufenden Prozesse den gleichen Speicherbereich verwenden.

    // Create a named file mapping object.
          hMapObject = CreateFileMapping(
                    (HANDLE) 0xFFFFFFFF, // use paging file
                    NULL,                // no security attributes
                    PAGE_READWRITE,      // read/write access
                    0,                   // size: high 32-bits
                    sizeof(TPLCComm),           // size: low 32-bits
                    "NameOfMyObject");    // name of map object
          if (hMapObject == NULL) return FALSE;
    
          // The first process to attach initializes memory.
    
          init = (GetLastError() != ERROR_ALREADY_EXISTS);
    
          // Get a pointer to the file-mapped shared memory.
    
          PMyObject = (TMyObject*) MapViewOfFile(
                    hMapObject,     // object to map view of
                    FILE_MAP_WRITE, // read/write access
                    0,              // high offset:  map from
                    0,              // low offset:   beginning
                    0);             // default: map entire file
          if (PPLCComm == NULL) return FALSE;
    

    In der Win32-Hilfe oder bei MS müßte es auch ein ausführlicheres Beispiel geben.

    Rob'


Anmelden zum Antworten