programm in c++ das sich an stelle anderer aufruft.

hallo
ich hab mal was von einer c++ funktion gehört, die immer das programm ausführt, zu dem sie gehört(schlecht ausgedrückt), anstelle einesanderen, oder mehreren anderen. Das fand ich sehr interessant, hab aber nichte dazu im internet gefunden. Aber natürlich sollte dieser Vorgang nicht endlos ausgeführt werden, sondern nur 1/2/3 mal, sonst hätte ich ein problem. vielleicht kann mir da jemand helfen, der weis was ich meine?
danke
 
Naja von so einer Funktion habe ich noch nichts gehört, aber das was du meinst könntest du unter Windows mit ein paar zeilen Code hinkriegen. Einfach eine Schleife bauen und das Programm mittels system ("programm.exe"); aufrufen.
 
Ich glaub du weist was ich meine. Könntest du es mit vielleicht aber doch noch mal ein bischen genauer erklähren? Vielleicht in eiem Beispiel-Code?
danke im vorraus.
 
Nehmen wir mal an du willst, dass das Programm 5mal aufgerufen wird.

int x=5; //Hier wird der Variablen x der Wert fünf zugewiesen

for (int i=0;i<=x;i++) { // Die Schleife wird solange ausgeführt bis i>5 ist, wobei i jedesmal um eins erhöht wird
system("programm.exe"; // Das Program programm.exe wird per system Befehl aufgerufen
}
 
Ich könnte mir auch vorstellen, dass du fork() meinst. Das ist ein Systemaufruf auf UNIX-Systemen, mit dem man seinen eigenen Prozess (Task) dupliziert. Danach hast du deinen Originalprozess und einen Kindprozess, die beide parallel laufen. Der "Papa" kann danach mit waitpid() auf seine Kinder warten. Bei Windows gibt es auch noch _spawnlp(), womit man seinen eigenen Prozess durch was anderes ersetzen kann.
 
Das mit system("______"); wa schon gut,
Aber wenn ich das programm starte kommt hinter dem programm immer
noch eine Console. Ich hab s schon mit FreeConsole(); versucht, ging aber
nicht. Muss ich das in eine Schleife machen oder vielleicht was anderes
nehmen?
 
Wenn du willst, dass das neue Programm die gleiche Konsole benutzt, dann nimm CreateProcess(). Nicht ganz so einfach wie system():

Code:
Parameter:      Befehl und Verzeichnis, wo der Befehl ausgeführt werden soll.
Beispielaufruf: execute("net show", ".\\");

void execute(char *cmd, char *cwd)
{
    int k;
    STARTUPINFO startup;
    PROCESS_INFORMATION procinfo;
    memset(&startup, 0, sizeof(startup));
    startup.cb = sizeof(STARTUPINFO);
    k = CreateProcess(NULL,
    /* Befehl */      cmd,
    /* Kontext */     NULL,
    /* Kontext */     NULL,
    /* Neue Handler */FALSE,
    /* Priorität */   0,
    /* Umgebung */    NULL,
    /* Verzeichnis */ (LPTSTR) cwd,
                      &startup,
                      &procinfo);
    // Nächste Zeile wartet, bis der neue Prozess beendet wurde...
    // WaitForSingleObject(procinfo.hProcess, INFINITE);
}
 
Ich weis nicht.
Das mit system(""); hat schon funktioniert. Ich hatte nur das problem,
dass, egal ob ich ein programm oder eine datei einsetzte(system("bsp.exe");),
sich dahinter immer
eine console öffnete. die wollt ich verbergen mit FreeConsole(); dass ging
aber nicht.
 
Liegt daran, dass FreeConsole() die Konsole des aktuellen Prozesses schließt und nicht die des neuen Prozesses. Korrigiert mich, wenn ich falsch liege, aber ein mit System() aufgerufenes Konsolenprogramm bekommt meines Wissens immer automatisch eine Konsole zugewiesen.
 
OK Danke
Durch euch bin ich schon jetzt schlauer geworden.
aber was mach ich jetzt?
Sollte ich es von grund auf neu und anderst machen?
 
Zurück
Oben