System Befehle im C++-Code



  • Hi Leute!

    Ich befasse mich im Moment mit Windows System Befehlen im C++ Code.
    Dabei habe ich folgendes Problem:

    Ich habe eine for-Schleife, in der ich ganz normal c++ schreibe.
    Dann (auch noch innerhalb der Schleife) rufe ich den Befehl "system(ping xxx.xxx.xxx.xxx)" aus.
    Während gepingt wird, geht der Compiler allerdings im Code weiter (was ja eigentlich auch logisch und sinnvoll ist).

    Ich will allerdings, dass wenn "system(ping xxx.xxx.xxx.xxx)" ausgeführt wird, gewartet wird, bis der Ping fertig ist und dann im Code weitergegangen wird.

    Ich hoffe ich habe die Problematik relativ verständlich umschrieben.
    Falls nein, fragt mich einfach.

    Ich bin dankbar für jede Antwort!

    vG R3aper



  • Vergiss system(), verwend CreateProcess() und WaitForSingleObject(). Oder noch besser: Implementier dein eigenes ping 😉



  • R3aper schrieb:

    Ich will allerdings, dass wenn "system(ping xxx.xxx.xxx.xxx)" ausgeführt wird, gewartet wird, bis der Ping fertig ist und dann im Code weitergegangen wird.

    system() erzeugt einen OS-Spezifischen Konsolen-Befehl der dann AFAIK in einem Thread bearbeitet wird. Du hast aber natürlich keinen Zugriff auf solche Threads, also kannst du auch nicht wissen, wann er vorbei ist.



  • Du kannst meine Klasse aus diesem Thread:
    http://www.c-plusplus.net/forum/248213
    benutzen.



  • Cool!

    Danke für eure Erklärungen!
    Für Hintergrundinfo bin ich immer zu begeistern.

    @Belli: Danke für die Klasse.
    Ich werde mich mal reinlesen.

    Ich würde den Thread aber nicht gleich schließen, vielleicht kommen ja noch weitere Info.



  • Hacker schrieb:

    system() erzeugt einen OS-Spezifischen Konsolen-Befehl der dann AFAIK in einem Thread bearbeitet wird. Du hast aber natürlich keinen Zugriff auf solche Threads, also kannst du auch nicht wissen, wann er vorbei ist.

    Ganz so kann es nicht sein, sonst würde der hier von vielen genutzte

    system("pause");
    

    doch nicht funktionieren, oder?



  • Belli schrieb:

    Hacker schrieb:

    system() erzeugt einen OS-Spezifischen Konsolen-Befehl der dann AFAIK in einem Thread bearbeitet wird. Du hast aber natürlich keinen Zugriff auf solche Threads, also kannst du auch nicht wissen, wann er vorbei ist.

    Ganz so kann es nicht sein, sonst würde der hier von vielen genutzte

    system("pause");
    

    doch nicht funktionieren, oder?

    Was meinst du? system("pause") ist ein Konsolen-befehl, der nicht asynchron ist. Bedeutet, das Programm wird nicht fortgesetzt.
    Die Ausnahme bestätigt die Regel 😉

    Edit: Viele verwenden es nicht, hoffe ich.



  • Ich meine, dass alle Konsolenbefehle synchron (also NICHT asynchron sind). Und wenn 'pause' synchron in einem anderen Thread gestartet werden würde, würde mein Hauptthread doch einfach weiter (zu Ende) laufen und unter Windows dann auch alle gestarteten Threads beenden.

    Edit:
    Einen anderen Thread meinst Du wahrscheinlich gar nicht ... Aber wie gesagt, Konsolenbefehle sind doch alle synchron?



  • Belli schrieb:

    Edit:
    Einen anderen Thread meinst Du wahrscheinlich gar nicht ... Aber wie gesagt, Konsolenbefehle sind doch alle synchron?

    ping aber bspw. nicht. Du pingst, und kannst nebenbei deinen Prozess fortsetzten ( main() ).



  • Ich hab das noch nicht mit system probiert, aber wenn ich in der Konsole ping absetze,verhält es sich synchron. Deshalb bin ich etwas überrascht.


Anmelden zum Antworten