Seite 1 von 1

Funkton in einen Prozess auslagern

Verfasst: 11. April 2009 13:08
von anno1988
hallo,

mich würde mal interessieren ob es in Qt auch möglich ist, eine Funktion in einen externen prozess auszulagern?

geht das ?

gruß anno

Verfasst: 11. April 2009 13:33
von Willi2793
Ja. Stichwort für eigene Klassen: QThread und für externe Programme: QProcess

Verfasst: 11. April 2009 13:53
von anno1988
na ich meine eigentlich nicht externe programm in diesem sinn, dass ich eine datei aufrufe, sondern eine selbs geschriebene funktion als prozess auslagere.

Verfasst: 11. April 2009 13:56
von franzf
anno1988 hat geschrieben:na ich meine eigentlich nicht externe programm in diesem sinn, dass ich eine datei aufrufe, sondern eine selbs geschriebene funktion als prozess auslagere.
Prozess != Thread!!! Lies dir zu den beiden Stichpunkten mal die Wikipedia durch.

Wenn du UNBEDINGT eine eigene Funktion in einen anderen Prozess auslagern willst, musst du deine Funktion samt Parameterübergabe in ein eigenes Executable packen.

Verfasst: 11. April 2009 13:57
von anno1988
ja ich weiß was ein prozess und thread ist.

da kenne ich den unterschied. und meine frage habe ich schon richtig formuliert. Ich meine damit einen Sohnprozess

ich rede da von so etwas

http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html

allerdings halt in qt.

Verfasst: 11. April 2009 14:25
von Christian81
Ich würde einfach mal sagen - schau Dir an was Willi2793 geschrieben hat...

Verfasst: 11. April 2009 14:26
von franzf
anno1988 hat geschrieben:ja ich weiß was ein prozess und thread ist.

da kenne ich den unterschied. und meine frage habe ich schon richtig formuliert. Ich meine damit einen Sohnprozess

ich rede da von so etwas

http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html

allerdings halt in qt.
Dass du einen Sohnprozess haben willst, hast du bisher nicht gesagt, nur dass du eine Funktionen in einen neuen Prozess asulagern willst, was schon was anderes ist!

Der Sinn in Verbindung mit Gui-Programmierung entzieht sich mir vollkommen. Dafür gibt es auch keine eigene Klasse in Qt. Wehalb denn auch, ist ja nur die eine Funktion fork().

Weshalb muss es denn unbedingt ein frok() sein? Lässt sich das absolut nicht besser regeln? Kannst ja mal kurz erklären, was du vor hast.

Verfasst: 11. April 2009 14:35
von burli
Das Stichwort dürfte eher QtConcurrent sein. Gibt es aber erst seit Qt4.4

Verfasst: 11. April 2009 14:36
von anno1988
naja also das stimmt eigentlich schon, dass ich eine funktion in diesem fork in einen externen prozess auslagern will.

da man mit qt auch konsolenanwendugne schreiben kann wollte ich das einfach mal wissen ob das funktioniert oder nicht.

innerhalb von diesem fork kann ich da alles mögliche machen, auch z.b. eine funktion als eigenständiger prozess laufen lassen.

denn es ist dann halt wieder umständlich das für verschiedene systeme immer extra zu programmieren.

wenn es in qt schon geben würde wäre das ja super.

aber so wie ich die Reaktion verstehe gibts das also nicht.

Verfasst: 11. April 2009 15:04
von franzf
Naja, prinzipiell funktionieren tut es ja schon. Und du kannst es auch machen, wenn du meinst dass es Sinn macht. Ich denke das tut es nicht.

Dein fork() kopiert den GANZEN Speicherbereich deines Prozesses in einen neuen Bereich. Das alleine kann schon ganz schön dauern. Ein neuer Thread tut in deinem Falle genau das gleiche. Oder willst du wirklich für den neuen Kind-Prozess die komplette Prozessumgebung haben? Bezweifle ich.

In deinem Fall leite einfach von QThread ab, schreib dir setter/getter, für alle Daten die du brauchst, implementier run(), und gut ist.

Verfasst: 11. April 2009 20:33
von anno1988
stimmt ist auch ne gute idee, dann werde ich das mal so machen.