Probleme bei fork()

Alles rund um die Programmierung mit Qt
Antworten
stockfisch
Beiträge: 5
Registriert: 15. Juli 2006 16:44
Wohnort: Linz (Österreich)

Probleme bei fork()

Beitrag von stockfisch »

Hallo Mädls und Jungs,

habe folgendes Problem: MainWidget erzeugt Objekt einer Klasse, für die eine Methode aufgerufen wird, wo folgendes passiert:

Vater erzeugt zwei Kinder, die über eine Schnittstelle Daten empfangen. Die Kinder kommunizieren über Shared Memory mit dem Vater, der Vater soll dann wiederrum die empfangenen Daten in den GUI schreiben.

also ungefähr so: im MainWidget wird Funktion mkproc(pointer auf MainWidget) aufgerufen.

Code: Alles auswählen

function mkproc(MainWidget * ){
     allgemeiner Code (beschreiben vom Gui funktioniert noch)

     if ((pid=fork() > 0){
          Vater erzeugen und shm zur Verfügung stellen
          Vater 'merkt' auch, wenn Daten von Kindern gekommen sind und 
          soll GUI befüllen -> geht aber nicht
     } else if { (pid=fork() > 0) {
          Kind 1 (empfängt Daten und schreibt in shm
     } else if { (pid=fork() > 0) {
          Kind 2 (empfängt Daten und schreibt in shm
     }
} // Ende Methode
Anmerkung: Leider kann ich nur mittels fork() Prozesse erzeugen und nicht Threads; Library zum Empfangen der Daten ist nicht Thread-Safe :roll: ..

Hat jemand die rettende Idee? :?

<Edit> verwende QT 3.3 </Edit>
Rettet den Wald -- Esst Spechte!!!1!!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich glaube fork() ist keine gute Idee da Du damit ggf. die internen Strukturen von Qt durcheinander bringst und er (vielleicht) nicht mehr so recht weiss welcher Thread/Process der GUI-Thread ist (nur dieser darf / kann grpahische Ausgaben machen).
Mach fork mal in der main() - Methode bevor QApplication instanziiert wird.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
stockfisch
Beiträge: 5
Registriert: 15. Juli 2006 16:44
Wohnort: Linz (Österreich)

Beitrag von stockfisch »

HI Christian,

hmm naja, um das fork() komm ich leider nicht herum; das Problem, wenn ich in der main-Methode (also vor der Instantierung der QApplication) das fork mache kann ich keinen Pointer auf das MainWidget übergeben; da lebt es ja noch nicht und somit kann der Vater auch dieses nicht befüllen .. oder denk ich da zu kompliziert scho wieder?
Rettet den Wald -- Esst Spechte!!!1!!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Probiere einfach mal den fork() so früh wie möglich zu machen, evtl. auch nur zu Testzwecken.
Kannst Du die beiden Worker-Prozesse evtl. als eigenständige executables machen damit Du sie mittels QProcess aufrufen kannst?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten