czekanie na otwarcie procesu potomnego

dział ogólny

czekanie na otwarcie procesu potomnego

Nowy postprzez banita » niedziela, 22 listopada 2009, 13:01

mam taki schemat do wykonania:

moj program:

// instrukcje 1
// odpalenie procesu potomnego
// instrukcje 2
// zamkniecie programu


chodzi o to ze instrukcje 2 nie moga sie wykonac dopuki proces potomny nie bedzie otwarty. czasem (wystarczy ze komp przytnie) wykonuja sie instrukcje 2 a proces dopiero sie "laduje".
wiem jak poczekac na wykonanie procesu ale to mnie nie ratuje poniewaz instrukcje 2 musza sie wykonac przed zakonczeniem procesu. zatem jak uruchamiajac proces potomny moge sprawdzic czy zostal on juz otwarty?
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: czekanie na otwarcie procesu potomnego

Nowy postprzez Cyfrowy Baron » poniedziaÅ‚ek, 23 listopada 2009, 10:03

Odpwiedź w serwisie Cyfrowy Baron dział: porady -> API: Uruchomienie aplikacji i oczekiwanie na jej zamknięcie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: czekanie na otwarcie procesu potomnego

Nowy postprzez banita » poniedziaÅ‚ek, 23 listopada 2009, 17:16

wiem jak poczekac na wykonanie procesu ale to mnie nie ratuje poniewaz instrukcje 2 musza sie wykonac przed zakonczeniem procesu.


chodzi o to ze wiem jak zawiesic swoj program do czasu az uruchomy proces bedzie zamkniety. ja potrzebuje zidentyfikowac ze proces zostal w pelni otwarty, wykonac instrukcje 2 i zamknac swoj program, a ten otwarty proces dziala dalej.

chodzi o to ze wywolanie otwarcia procesu nie powoduje jego natychmiastowego fizycznego zaladowania. czasem "zamulenie" komputera spowoduje ze wywolywany proces otworzy sie z sekundowym opuznieniem a w tym czasie wykonaja sie instrukcje 2 co jest wlasnie moim problemem.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: czekanie na otwarcie procesu potomnego

Nowy postprzez Cyfrowy Baron » poniedziaÅ‚ek, 23 listopada 2009, 18:56

Znalazłem coś w pliku pomocy pod hasłami:

► Waiting for a Thread to Finish Executing 


► Waiting for a Task to Be Completed 


► Waiting for Threads 
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: czekanie na otwarcie procesu potomnego

Nowy postprzez banita » poniedziaÅ‚ek, 23 listopada 2009, 22:07

niestety ale to nie pomoze. w momencie gdy proces sie uruchamia to juz pojawia sie na liscie uruchomionych procesow ale nie znaczy to ze program zostal w pelni zaladowany i jest gotowy do uzycia. przykladowo c++builder, proces bds pojawia sie momentalnie ale zanim srodowisko jest gotowe do uzycia mija kilka sekund.

problem rozwiazalem troceh an okretke ale chwilowo to rozwiazanie mi wystarczy. poprostu daje kilka sekund uspienia dla aplikacji i po tym czasie uznaje ze proces jest juz w pelni odpalony. czas uspienia mozna modyfikowac. cialge bede szukal lepszego rozwiaznia.

problem bylby mniejszy gdyby proces potomny byl moja aplikacja i moglbym za jej pomoca dac sygnal ze nastapilo "pelne" zaladowanie, niestety nie mam takiej mozliwosci.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: czekanie na otwarcie procesu potomnego

Nowy postprzez Cyfrowy Baron » wtorek, 24 listopada 2009, 08:36

Można by też spróbować ze zdarzeniem OnIdle aplikacji. Gdy uruchamiany program angażuje na proces na proces uruchamiania cały czas procesora, to zdarzenie OnIdle nie będzie się wykonywać, gdy program zostanie uruchomiony ruszy również to zdarzenie.

Inna sposób, w chwili uruchamiania program z reguły angażuje więcej czasu procesora niż tuż po uruchomieniu, więc po uruchomieniu procesu możesz sprawdzać procent użycia procesora dla tego programu, gdy spadnie do zera znaczy się, że program został w pełni uruchomiony.

Inny sposób, wykorzystanie funkcji DWORD WINAPI WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); ale zamiast wartości INFINITE, określasz czas oczekiwania, czyli to co sam juz zrobiłeś, tylko nie usypiasz aplikacji za pomocą funkcji Sleep, lecz po uruchomieniu czekasz określony czas:

Kod: Zaznacz cały
if(ShellExecuteEx(&sei))
  try
  {
   WaitForSingleObject(sei.hProcess, 20000);
  }
  __finally
{
  // instrukcje
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości