Programm starten, aber nicht auf Beendigung warten



  • Hallo,
    ich möchte aus meinem Konsolenprogramm heraus ein anderes programm starten. Habe dieses mit der Funktion system(); versucht, aber ich möchte nicht, dass die Konsolenanwendung auf die Beendigung des gestarteten Programmes wartet, wie kann ich das verwirklichen ?

    Gruß und danke Hansii



  • Also wenn ich Dich richtig verstehe dann willst Du, dass Dein Programm normal weiterläuft nach Start des anderen Programms?! Das hört sich mir doch schwer nach Threads an 🙂
    Wie man das in Java löst weiss ich, aber in C++...keinen blassen Schimmer. Vielleicht kann jemand anderes was dazu schreiben wie man das in C++ lösen könnte.
    Kurz zur Erklärung des Begriffes thread. Du kannst (in Java) eine Klasse zu einem thread (Prozess) machen. Dies bedeutet, dass ich mehrere Prozesse quasi gleichzeitig laufen lassen kann. Ob allerdings aus einem Fremdprogramm während dessen Laufzeit gesprungen wird weiss ich nicht.



  • #include <windows.h>
    ShellExecute(NULL,"open","calc.exe","","",SW_SHOW);



  • @Majenga: Dein Post ist fast noch sinnloser als meiner hier ^^ 🙂

    MfG SideWinder



  • newvet schrieb:

    #include <windows.h>
    ShellExecute(NULL,"open","calc.exe","","",SW_SHOW);

    SideWinder schrieb:

    @Majenga: Dein Post ist fast noch sinnloser als meiner hier ^^

    MfG SideWinder

    Jaja... Aber: würde das denn funktionieren? (Der Lösungsvorschlag von newvet?)

    JA:

    #include <stdio.h>
    #include <windows.h>
    
    int main ()
    {
    	int auswahl;
    
    	printf("Wollen Sie, dass \"Calc\" geöffnet wird? [J/N]");
    	auswahl = getchar();
    	if (auswahl == 'j' || auswahl == 'J') {
    		ShellExecute (NULL, "open", "calc.exe", "", "", SW_SHOW);
    		return 0; /* <--- hierauf kommt es an */
    	}
    
             printf("\nSchade!");
    
    	return 0;
    }
    

    ob system(...) gehen würde, weiß ich nicht. Sollte aber.

    Viel Erfolg! Mfg, the flyingCoder.



  • Natürlich funktioniert nevwets Vorschlag - sonst hät ich ja schon was gesagt ^^. system() ist hier falsch, es macht nämlich genau das was hansii nicht will: Das das Programm auf die Beendigung wartet.

    MfG SideWinder



  • SideWinder schrieb:

    system() ist hier falsch, es macht nämlich genau das was hansii nicht will: Das das Programm auf die Beendigung wartet.

    Ich habs nicht Ausprobiert, weshalb ich ja auch gesagt hatte, dass ich es nicht genau weiß.

    Ist ja auch egal. Das, auf das es ankommt, ist das return 0;.

    mfg, the flyingCoder.



  • ok Sidewinder,
    du sagst mir durch die Blume, dass mein post schwachsinn ist *g*
    Macht ja nix, nur erklär mir mal einer wieso ich so falsch liege? 😕
    ich habe meine konsolen anwendung und eine weitere.. und die sollen beide laufen. Sry, hört sich für mich immer noch nach threading an^^ (schlag mich ruhig wenns dir dann besser geht :D)



  • In DOS ist das eh nicht möglich, da muss man warten bis das andere Programm beendet hat -> somit nur eine Methode möglich die wie system() auf die Beendigung des Befehls wartet.

    ShellExecute() führt unter Windows einfach ein Programm aus. Klar macht Windows dann Multitasking (nicht Threading glaub ich in diesem Fall) und lässt einmal dein Programm ein paar Takte machen und danach das nächste, etc.

    Aber darum musst du dich nicht kümmern. Du müsstest dich nur drum kümmern einen Thread zu starten (aha das andere Wort ;)), das heißt du möchtest zwei Codeabschnitte aus deinem Programm "gleichzeitig" ausführen - dann musst dich du kümmern (mehr oder weniger, also eigentlich bloß um Start und Beendigung)

    MfG SideWinder



  • Achja und auf return(0) kommts eben net an. Er kann beruhigt sein Programm weiterführen nachdem er mit ShellExecute() ein anderes Programm aufgerufen hat.

    Das aufgerufene Programm startet als würdest du neben deinem Browser auch noch dein Textverarbeitungsprogramm (Anm. Sinnlos mit mir, ich sag wieder Word dazu) starten.

    Funktioniert doch auch problemlos? 😉

    MfG SideWinder



  • Naja, ich wollte mit dem "return 0;" nur zeigen, dass er so das Programm beenden kann und, dass das Programm (, was er geöffnet hat,) weiterhin laufen bleibt.



  • Natürlich geht das auch mit system.
    Dafür gibt es unter Window den Befehl "start".

    system("start program");
    


  • Freiwillig system() wenns keinen Vorteil bringt?

    MfG SideWinder



  • SideWinder schrieb:

    Freiwillig system() wenns keinen Vorteil bringt?

    erstens: Genau, warum?
    Zweitens: geht nicht auch:

    system ("c:\\windows\\calc");
    

    ??? also: system(pfad);

    MfG, the flyingCoder.

    PS: ich denke der post ("system (start ...)...") war nur der vollständigkeit halber gemeint 😃



  • @Side
    Also sinnlos fand ich den Eintrag von Majenga gar nicht. Die Idee war doch ganz gut. Es steht eigentlich nur dagegen, dass es auch einfacher geht.

    DOS kann übrigens auch multitaskingfähig sein...



  • AJ schrieb:

    @Side
    Also sinnlos fand ich den Eintrag von Majenga gar nicht. Die Idee war doch ganz gut. Es steht eigentlich nur dagegen, dass es auch einfacher geht.

    DOS kann übrigens auch multitaskingfähig sein...

    Ja und du kannst auch Windows 9.x als Server für ein Firmennetzwerk verwenden.

    MfG SideWinder



  • Ich denke eh, das der Post von Majenga nur zur Vollständigkeit dienen sollte ... (Genau wie Meiner mit dem "System(Pfad)")



  • SideWinder schrieb:

    AJ schrieb:

    @Side
    Also sinnlos fand ich den Eintrag von Majenga gar nicht. Die Idee war doch ganz gut. Es steht eigentlich nur dagegen, dass es auch einfacher geht.

    DOS kann übrigens auch multitaskingfähig sein...

    Ja und du kannst auch Windows 9.x als Server für ein Firmennetzwerk verwenden.

    MfG SideWinder

    Wenn du genug Arbeitsspeicher reinhaust :p



  • AJ schrieb:

    Wenn du genug Arbeitsspeicher reinhaust :p

    Macht mehr Arbeitsspeicher Win9x stabiler/sicherer? 🙄



  • Nö, aber du kannst dann genügend Serverprogramme drauf laufen lassen 😉


Anmelden zum Antworten