Avatar billede oergaard Nybegynder
01. oktober 2003 - 19:28 Der er 6 kommentarer og
1 løsning

Afventer programstart.

Jeg er i gang med at lave et program, som skal starte et par programmer op i en bestemt rækkefølge! Til dette bruger jeg ShelleExecute(). Lad os f.eks. sige at jeg skal starte fem programmer op, kaldet Program1, Program2 osv.

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShelleExecute(Handle, nil, Program1, nil, nil, SW_SHOW);
  ShelleExecute(Handle, nil, Program2, nil, nil, SW_SHOW);
  ShelleExecute(Handle, nil, Program3, nil, nil, SW_SHOW);
  ShelleExecute(Handle, nil, Program4, nil, nil, SW_SHOW);
  ShelleExecute(Handle, nil, Program5, nil, nil, SW_SHOW);
end;

Denne række følge skulle de også gerne vise sig i nede på proceslinien, men eftersom program3 starter hurtigere op end hhv. program 1 og 2 ligger denne først på proceslinien.

Mit spørgsmål lyder så på om, men kan indsætte en kode efter ShellExecute(), som går ind og afventer at program1 er eksekveret.

Altså afventer programstart før næste fil eksekveres.

//Oergaard
Avatar billede oergaard Nybegynder
01. oktober 2003 - 19:39 #2
Jeg har været inde og kigge på de pågældende eksempler før jeg skrev mit eget indlæg, men de opfylder desværre ikke helt mit behov.

Jeg ønsker ikke at venter på at program1 afsluttes, men blot at det er startet op! Alle fem programmer skal køre på samme tid, og skal placeres i en bestemt rækkefølge på proceslinien.

//Oergaard
Avatar billede snowball Novice
01. oktober 2003 - 19:49 #3
Det er godt nok lidt af en "lappe løsning", men det burde som sådan virke. Du kan lave en timer der kører f.eks. hvert 5. sek og så starter programmet op alt efter hvad en counter indeholder. F.eks. som nedenstående:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  If ProgramCounter = 1 Then Begin
    ShellExecute(Handle, nil, PChar(Program1), nil, nil, SW_SHOW);
    Inc(ProgramCounter);
  End
  Else If ProgramCounter = 2 Then Begin
    ShellExecute(Handle, nil, PChar(Program2), nil, nil, SW_SHOW);
    Inc(ProgramCounter);
  End
  Else If ProgramCounter = 3 Then Begin
    ShellExecute(Handle, nil, PChar(Program3), nil, nil, SW_SHOW);
    Inc(ProgramCounter);
  End
  Else If ProgramCounter = 4 Then Begin
    ShellExecute(Handle, nil, PChar(Program4), nil, nil, SW_SHOW);
    Inc(ProgramCounter);
  End
  Else If ProgramCounter = 5 Then Begin
    ShellExecute(Handle, nil, PChar(Program5), nil, nil, SW_SHOW);
    ProgramCounter := 1;
  End;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ProgramCounter := 1;
  Timer1.Interval := 5000;
end;

Snowball
Avatar billede oergaard Nybegynder
01. oktober 2003 - 19:52 #4
Sådan har jeg egentlig også lavet det men, som du selv siger så er det lidt af en "lappe løsning" og det var egentlig det jeg ønskede at undgå! :-)

//Oergaard
Avatar billede greatdane Nybegynder
10. oktober 2003 - 11:44 #5
En primitiv måde var at lade hvert program oprette en bestemt fil, som tegn på, at de er oppe at køre, og så lade hovedprogrammet teste på, om filen eksisterer.

I pseudokode noget i stil med:

for pgmnbr:=1 to 5
  delete file;
  start program number pgmnbr
  repeat
      wait a sec;
  until file exists;
end;

Og de kaldte programmer skal så bare oprette filen som det første.

Det kan formentlig give nogle problemer, hvis hovedprogrammet prøver at slette filen, før underprogrammet har fået lukket den, så alternativt kunne man sende et tal over som parameter til hvert af de kaldte programmer, og de skal så oprette en fil, hvor tallet indgår i navnet.
  Hvis man skal opføre sig pænt, så prøver hovedprogrammet at slette filerne til sidst, før det afslutter, men det er ikke kritisk for metoden, idet filerne jo slettes, før underprogrammerne aktiveres.
Avatar billede greatdane Nybegynder
10. oktober 2003 - 11:45 #6
Ups - jeg manglede en linje i pseudokoden.  Efter "until file exists;" havde jeg tænkt en linje med "delete file;".  Det er årsagen til min kommentar om, at det måske kan give enqueue-problemer at forsøge at slette den.
Avatar billede oergaard Nybegynder
29. oktober 2003 - 10:47 #7
Jeg har selv løst problemet - eller dvs. jeg bruger bare min første løsning (selvom jeg mener det er dårlig programmerling)

//Oergaard
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