Callback-Funktion in anderem Thread aufrufen (lassen) (IPC)



  • Hallo,

    LINUX:
    Ich habe ein Serverprogramm, daß mit seinen Clients über Shared-Memory kommuniziert. Der Server berechnet Daten und sollte ein Bestimmter Zustand auftreten, soll er einem Clienten zwei Parameter übergeben und dem mitteilen,
    daß er mit diesen Parametern eine vorher bestimmt CallBack-Funktion aufrufen soll.

    Das Problem ist nur, daß beide keine verwandten Prozesse sind.

    Ich weiß nicht, ob ich das einleuchtend erklärt habe. Im entfernten Sinne ist
    das vielleicht ein Bsp:
    Der X-Server.
    Der Client meldet sich beim X-Server an. Sollte nun die Maus über dem Fenster
    des Clienten geschoben werden, sendet der X-Server ja eine EventMeldung an die einprogrammierte CallBack-Funktion des Clienten...

    So ähnlich stelle ich mir das vor.

    Am einfachsten wärs js, wenn ich einen Funktionspointer im Shared-Memory eingeben würde und die Funktion vom Server aus aufrufen würde... Aber das geht sehr warscheinlich ja nicht...

    Hat hier jmd. durchgeblickt und hat ne Idee ? 😉

    Ich will hier auch meinen fertigen Algo. haben, nur wenn jmd. vielleicht ne Idee hat, wie sowas funzt, kann er sich mir ja mitteilen 😉

    DANKE!
    Gruss,
    Stef



  • Du wirst wohl Funktions-IDs in irgendeiner Art einführen müssen und ein Mapping von IDs zu Funktionsadressen herstellen.

    Solltest du nicht eher Pipes verwenden (zumindest für die "kleinen" Daten)? Wie weiß sonst der Server, dass was neues da ist?



  • ich würde das so machen (pseudo code)

    //client
    std::map<unsigned long,boost::signal<void ()> > sigs;
    data=connection.read_data();
    if(data.is_callback())
      sigs[data.callback()]();
    

    Ansonsten wenn du nur Funktionen aufrufen willst, gibt es von SUN noch eine RPC Technik

    http://www.cs.wpi.edu/~cs4513/b01/week4-sunrpc/week4-sunrpc.html


Anmelden zum Antworten