Avatar billede jakobdo Ekspert
22. december 2003 - 16:15 Der er 17 kommentarer og
2 løsninger

Kalde program flere gange, men ikke før det er færdigt.

Hej,
jeg har lavet et program, som skal kalde et program med forskellige parametre, dog må det ikke kaldes før det er kørt færdigt...
Hvis i forstår...

Program1:

for(int i = 0; i < 10; i++)
{
  start program(i);
  vent indtil program(i) er kørt færdigt;
}

osv...
Avatar billede arne_v Ekspert
22. december 2003 - 16:22 #1
Prøv med system funktionen i stdlib.h !
Avatar billede jakobdo Ekspert
22. december 2003 - 16:24 #2
altså system("program(i)");
Kan jeg ikke bruge shellExecute eller shellExecuteEx?
Avatar billede arne_v Ekspert
22. december 2003 - 16:27 #3
Formentligt snarere noget a la:

for(int i = 0; i < 10; i++)
{
  sorintf(cmd,"program %s",val[i]);
  system(cmd);
}
Avatar billede arne_v Ekspert
22. december 2003 - 16:27 #4
ShellExecute er sikkert også en mulighed.
Avatar billede jakobdo Ekspert
22. december 2003 - 16:34 #5
Det virker ikke som jeg vil...
Kan man altid regne med at et program vil returnere når det er færdigt?
Avatar billede jakobdo Ekspert
22. december 2003 - 16:36 #6
Nu har jeg lige testet på et andet program, det virker fint... Den står fint og venter til programmet lukkes ned...
Avatar billede arne_v Ekspert
22. december 2003 - 16:49 #7
Ved jeg ikke.
Avatar billede jakobdo Ekspert
23. december 2003 - 12:23 #8
Jeg har en plan... :o)
ShellExecuteEx, sætter HANDLEN hProcess...
Så kunne jeg vel monitorer denne process, og vente med at starte program nummer 2, før program 1's process er "død"...
Men hvordan monitorer jeg processen, eller handlen?
Avatar billede jakobdo Ekspert
23. december 2003 - 12:52 #10
Nogle indsigelser mod dette:

    bErr = ShellExecuteEx(&si);
   
    if (bErr)
    {
        printf("Det gik godt - %s!\n",si.lpDirectory);
        while(si.hProcess != NULL)
        {
            GetExitCodeProcess(si.hProcess,&lpExitCode);
            if (lpExitCode == 0)
                break;

            Sleep(100);
        }
    }
    else
    {
        printf("Det gik ikke godt! Fejl: %d\n", GetLastError());
    }
Avatar billede arne_v Ekspert
23. december 2003 - 13:23 #11
Er STILL_ACTIVE == 0 ??
Avatar billede jakobdo Ekspert
23. december 2003 - 13:28 #12
Nope, når den kører viser den 259, når programmet lukkes, viser den 0...
Avatar billede jakobdo Ekspert
23. december 2003 - 13:29 #13
Dette gør det samme: if (lpExitCode != STILL_ACTIVE)
Avatar billede jakobdo Ekspert
23. december 2003 - 13:29 #14
Warning  If a process happens to return STILL_ACTIVE (259) as an error code, applications that test for this value could end up in an infinite loop.
Avatar billede arne_v Ekspert
23. december 2003 - 13:40 #15
Jeg havde fået vendt testet forkert.

Jeg tror at lpExitCode != STILL_ACTIVE er bedre end == 0, fordi
ikke mange programmer vil returnere 259, men nogen vil returnere 1 ved
fejl !
Avatar billede jakobdo Ekspert
23. december 2003 - 13:50 #16
Takker... Jeg tror næsten jeg vil dele dette svar mellem os! :o)
Avatar billede jakobdo Ekspert
23. december 2003 - 13:50 #17
Svar
Avatar billede arne_v Ekspert
23. december 2003 - 14:10 #18
svar
Avatar billede jakobdo Ekspert
23. december 2003 - 14:17 #19
Mon domænet Arne_V-Er-En-Gud.dk er taget?? :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis