Programm aus C++ Code aufrufen [Windows/Linux]
Programm aus C++ Code aufrufen [Windows/Linux]
Hallo,
ich suche nach einer guten Lösung, um ein Programm aus meinem laufendem Programm aufzurufen. Dabei soll folgendes möglich sein:
1) Ich muss wissen, wann der Prozess beendet wird. (Dabei spielt es keine Rolle warum, sprich Fehler und der Gleichen)
2) Es sollte möglich sein, diesen Prozess so zu starten, dass ich mein Programm weiterhin benutzen kann. (sollte mit Threads gehen, bin allerdings in das Thema noch nicht eingelesen.)
3) Die Lösung sollte sowohl auf Linux, als auch auf Windows die selben Ergebnisse produzieren.
Was muss die Lösung nicht können:
1) Ich brauche keine Daten aus dem anderen Programm, es sollen also keine Daten ausgetauscht bzw. auf einen gemeinsamen Speicher zugegriffen werden.
Beim Suchen durchs Netz bin ich auf Sachen wie: system(), pipe´s und spawnl gestoßen. Das Einzige was ich davon kenne ist system().
Hat jemand damit Erfahrung ? Oder einen Tipp, was unter den gegebenen Umständen das sinnvollste ist ?
MfG exbs
ich suche nach einer guten Lösung, um ein Programm aus meinem laufendem Programm aufzurufen. Dabei soll folgendes möglich sein:
1) Ich muss wissen, wann der Prozess beendet wird. (Dabei spielt es keine Rolle warum, sprich Fehler und der Gleichen)
2) Es sollte möglich sein, diesen Prozess so zu starten, dass ich mein Programm weiterhin benutzen kann. (sollte mit Threads gehen, bin allerdings in das Thema noch nicht eingelesen.)
3) Die Lösung sollte sowohl auf Linux, als auch auf Windows die selben Ergebnisse produzieren.
Was muss die Lösung nicht können:
1) Ich brauche keine Daten aus dem anderen Programm, es sollen also keine Daten ausgetauscht bzw. auf einen gemeinsamen Speicher zugegriffen werden.
Beim Suchen durchs Netz bin ich auf Sachen wie: system(), pipe´s und spawnl gestoßen. Das Einzige was ich davon kenne ist system().
Hat jemand damit Erfahrung ? Oder einen Tipp, was unter den gegebenen Umständen das sinnvollste ist ?
MfG exbs
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Programm aus C++ Code aufrufen [Windows/Linux]
Moin exbs.
am 29. Sep 2008 registriert und schon Dein erster Beitrag.
Ich hatte Dich nicht gelöscht, weil Du ja noch einer von der alten Garde bist. Die anderen Leute mit 0 Beiträgen lösche ich normalerweise nach drei Monaten wieder. ^^
Windows wird vermutlich anders gehen.
Daran hätte ich aber auch Interesse.
Pipes brauchst Du, wenn Du mit dem Befehl über Standardein- und -ausgabe kommunizieren möchtest. Unter Windows gibt es da eine popen()-Funktion, mit der man ein Dateihandle für einen Prozess erhält - ob es die unter Linux gibt, weiß ich jetzt nicht.
am 29. Sep 2008 registriert und schon Dein erster Beitrag.

Ich hatte Dich nicht gelöscht, weil Du ja noch einer von der alten Garde bist. Die anderen Leute mit 0 Beiträgen lösche ich normalerweise nach drei Monaten wieder. ^^
system() aus der Standard-Libexbs hat geschrieben:ich suche nach einer guten Lösung, um ein Programm aus meinem laufendem Programm aufzurufen. Dabei soll folgendes möglich sein:
1) Ich muss wissen, wann der Prozess beendet wird. (Dabei spielt es keine Rolle warum, sprich Fehler und der Gleichen)
Unter Linux/Posix: fork() und waitpid().exbs hat geschrieben:2) Es sollte möglich sein, diesen Prozess so zu starten, dass ich mein Programm weiterhin benutzen kann. (sollte mit Threads gehen, bin allerdings in das Thema noch nicht eingelesen.)
Windows wird vermutlich anders gehen.
Da müsste man sich wohl hinsetzen und eine plattformabhängige Implementierung einer Klasse machen, was die Threads angeht. Unter Windows bin ich da aber gerade auch nicht auf dem Laufenden.exbs hat geschrieben:3) Die Lösung sollte sowohl auf Linux, als auch auf Windows die selben Ergebnisse produzieren.
Daran hätte ich aber auch Interesse.
system ist ein vergleichsweise einfacher Befehl: es wird das Kommando aufgerufen, dass man dort übergibt.exbs hat geschrieben:Beim Suchen durchs Netz bin ich auf Sachen wie: system(), pipe´s und spawnl gestoßen. Das Einzige was ich davon kenne ist system().
Hat jemand damit Erfahrung ? Oder einen Tipp, was unter den gegebenen Umständen das sinnvollste ist ?
Pipes brauchst Du, wenn Du mit dem Befehl über Standardein- und -ausgabe kommunizieren möchtest. Unter Windows gibt es da eine popen()-Funktion, mit der man ein Dateihandle für einen Prozess erhält - ob es die unter Linux gibt, weiß ich jetzt nicht.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Programm aus C++ Code aufrufen [Windows/Linux]
Unter Windows vielleicht noch:
ShellExecute
CreateProcess
TerminateProcess
ShellExecute
CreateProcess
TerminateProcess
Unwissenheit ist ein Segen
Re: Programm aus C++ Code aufrufen [Windows/Linux]
Cool, dass du dich noch erinnerst. Ich bin eine eine Weile mit Java unterwegs gewesen. Jetzt komme ich langsam wieder in C++ rein und da gibt es noch viel zu tun.
Ich habe etwas rumprobiert und gelesen und festgestellt, dass ich eigentlich versucht habe zwei Probleme auf einmal zu lösen (Habe erst einmal die Begriffe Prozess und Thread etwas schwamming vermischt):
1) möchte ich einen Prozess auf meinem System starten. Dabei handelt es sich um ein Programm, welches nicht von mir ist. Ich schreibe quasi eine Oberfläche, in der Konfigurationsdatein bearbeitet werden und damit das ganze komfortabler ist, kann dann direkt das entsprechende Programm gestartet werden. Falls das jetzt etwas verwirrend ist, dann kann ich das verstehen
.
Habe gerade etwas (sehr kurz) mit popen() experimentiert und das scheint für meine Zwecke zu reichen (Habe es auf Linux getestet). Es startet das Programm und fertig. Einen Exitcode kann ich auch abfragen, damit lässt sich ja feststellen, ob das Programm beendet wurde oder nicht.
2) Die Sache mit den Threads werde ich wohl mit wxWidgets erledigen. Da ich auch die Oberfläche darin schreibe und es Plattforunabhängig ist, nutze ich gleich das. Allerdings ist das Thema Threads noch recht neu für mich und ich muss mir erst ein gutes Konzept überlegen. Im Prinzip soll halt nur das Programm gestartet sein und die Oberfläche benutzbar bleiben. Das bleibt sie zwar auch wenn ich popen() "allein" nutze, allerdings muss ich ja iwie darauf warten, dass das Programm fertig ist. Deswegen sollte diese Sache in einen Thread, damit ich auf das Ende warten kann. Was sagst du (ihr) ? Ist der Lösungsansatz so sinnvoll ?
MfG exbs
[EDIT] leider war ich etwas voreilig ... einen Exitcode bekomme ich nur, wenn ich das Programm mit pclose() beende ... Also steht die Frage im Raum, wie ich überhaupt abfangen kann, dass das Programm beendet wurde ?
Ich habe etwas rumprobiert und gelesen und festgestellt, dass ich eigentlich versucht habe zwei Probleme auf einmal zu lösen (Habe erst einmal die Begriffe Prozess und Thread etwas schwamming vermischt):
1) möchte ich einen Prozess auf meinem System starten. Dabei handelt es sich um ein Programm, welches nicht von mir ist. Ich schreibe quasi eine Oberfläche, in der Konfigurationsdatein bearbeitet werden und damit das ganze komfortabler ist, kann dann direkt das entsprechende Programm gestartet werden. Falls das jetzt etwas verwirrend ist, dann kann ich das verstehen

Habe gerade etwas (sehr kurz) mit popen() experimentiert und das scheint für meine Zwecke zu reichen (Habe es auf Linux getestet). Es startet das Programm und fertig. Einen Exitcode kann ich auch abfragen, damit lässt sich ja feststellen, ob das Programm beendet wurde oder nicht.
2) Die Sache mit den Threads werde ich wohl mit wxWidgets erledigen. Da ich auch die Oberfläche darin schreibe und es Plattforunabhängig ist, nutze ich gleich das. Allerdings ist das Thema Threads noch recht neu für mich und ich muss mir erst ein gutes Konzept überlegen. Im Prinzip soll halt nur das Programm gestartet sein und die Oberfläche benutzbar bleiben. Das bleibt sie zwar auch wenn ich popen() "allein" nutze, allerdings muss ich ja iwie darauf warten, dass das Programm fertig ist. Deswegen sollte diese Sache in einen Thread, damit ich auf das Ende warten kann. Was sagst du (ihr) ? Ist der Lösungsansatz so sinnvoll ?
MfG exbs
[EDIT] leider war ich etwas voreilig ... einen Exitcode bekomme ich nur, wenn ich das Programm mit pclose() beende ... Also steht die Frage im Raum, wie ich überhaupt abfangen kann, dass das Programm beendet wurde ?
- Bebu
- Beiträge: 562
- Registriert: Mi Okt 21, 2009 6:19 pm
- Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!
Re: Programm aus C++ Code aufrufen [Windows/Linux]
Du kannst dir auch nochmal Boost::Thread ansehen, für den Thread. Das mit dem Exitcode ist wieder eine andere Sache.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
Re: Programm aus C++ Code aufrufen [Windows/Linux]
Hallo Leute,
also erstmal muss ich mich entschuldigend, dass ich das Thema so lange habe brach liegen lassen. Bei der Aufgabe die ich zu lösen haben, bin ich bevor ich an den oben beschriebenen Problem angelangt bin, erstmal auf viele andere Hürden gestoßen. Trotzdem schreibe ich euch mal wie ich es letztlich gelöst habe.
Mit der Bibliothek wxWidgets ist es möglich eben diese Funktionalität recht schön zu erreichen. Für alle die es interessiert, hier mal ein http://docs.wxwidgets.org/2.9.1/classwx_process.html. Wenn jemand etwas Quelltext sehen will, einfach bescheid sagen.
Im Prinzip ist genau das möglich was ich wollte. Prozesse starten und Nachricht bekommen, wenn dieser beendet wurde.
Lg
also erstmal muss ich mich entschuldigend, dass ich das Thema so lange habe brach liegen lassen. Bei der Aufgabe die ich zu lösen haben, bin ich bevor ich an den oben beschriebenen Problem angelangt bin, erstmal auf viele andere Hürden gestoßen. Trotzdem schreibe ich euch mal wie ich es letztlich gelöst habe.
Mit der Bibliothek wxWidgets ist es möglich eben diese Funktionalität recht schön zu erreichen. Für alle die es interessiert, hier mal ein http://docs.wxwidgets.org/2.9.1/classwx_process.html. Wenn jemand etwas Quelltext sehen will, einfach bescheid sagen.
Im Prinzip ist genau das möglich was ich wollte. Prozesse starten und Nachricht bekommen, wenn dieser beendet wurde.
Lg
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Programm aus C++ Code aufrufen [Windows/Linux]
Besten Dank für einen gelösten Thread.
Was schreibst Du überhaupt? ^^
Was schreibst Du überhaupt? ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Programm aus C++ Code aufrufen [Windows/Linux]
Ich schreibe eine generische Oberfläche für Konsolenprogramme. Das ist jetzt sehr zusammen gekürzt, aber im Prinzip schon die Aufgabe. Das aufwendigste ist die Einarbeitung in die Oberflächenbibliothek. Das war auch der Grund, warum ich den Thread so lange nicht gepflegt habe.
Die Oberfläche soll konfigurierbar sein, damit der Anwender sie an seine Bedürfnisse anpassen kann. Also zum Bsp. Parametermenus erzeugen, Konfigurationsdatei-Editor, variable Buttonleiste usw. usw ...
Die Oberfläche soll konfigurierbar sein, damit der Anwender sie an seine Bedürfnisse anpassen kann. Also zum Bsp. Parametermenus erzeugen, Konfigurationsdatei-Editor, variable Buttonleiste usw. usw ...
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Programm aus C++ Code aufrufen [Windows/Linux]
Interessantes Projekt. Halt uns mal auf dem Laufenden 

Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.