Вниз
Скачать: CL | DM;

Особенности запуска процесса   Найти похожие ветки 

← →
Darvin ©   (2006-06-23 11:39) [0]

Здравствуйте.
Мне надо запустить процесс и дождаться окончания его выполнения. Я делаю так:
var
 SI     : STARTUPINFO;
 PI     : PROCESS_INFORMATION;

begin
   ...
   ZeroMemory ( @SI, SizeOf(SI) );
   SI.cb := SizeOf ( SI );
   if CreateProcess ( nil,              
                      PChar(FAppName + " " + FAppParams),    
                      nil,              // Process handle not inheritable.
                      nil,              // Thread handle not inheritable.
                      FALSE,         // Set handle inheritance to FALSE.
                      0,                // No creation flags.
                      nil,              // Use parent"s environment block.
                      nil,              // Use parent"s starting directory.
                      SI,              
                      PI )          
   then
   begin
     WaitForSingleObject ( PI.hProcess, INFINITE );
     CloseHandle ( PI.hProcess );
     CloseHandle ( PI.hThread );
     ...

Все работает, мой процесс на WaitForSingleObject ожидае выполнения строннего процесса. Но, у меня в приложении есть дополнительный поток TThread, который должен работать при работе стороннего процесса. А он не работает.
Вопрос.
Как правильно организовать вызов внешнего процесса, дождаться окончания его выполнения, но так, чтобы параллельные потоки моего приложения при этом работали?


← →
Сергей М. ©   (2006-06-23 11:40) [1]


> у меня в приложении есть дополнительный поток TThread, который
> должен работать при работе стороннего процесса. А он не
> работает


Значит у тебя ошибка в программе.


← →
Юрий Зотов ©   (2006-06-24 08:29) [2]

> Как правильно организовать вызов внешнего процесса, дождаться
> окончания его выполнения, но так, чтобы параллельные потоки моего
> приложения при этом работали?

Так, как у Вас и сделано, только в отдельном потоке. WaitForSingleObject усыпляет только тот поток, из которого она была вызвана, а все остальные будут работать.

Поэтому в [1] написано верно - если другой поток у Вас тоже переходит в ожидание, значит, он получился как-то завязанным с первым.


← →
isasa ©   (2006-06-24 10:54) [3]

А что, нельзя CreateProcess оформить в отдельном потоке, а не в главном?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
6-1143250745
Setor
2006-03-25 04:39
2006.08.06
Как завершить работу сетевого приложения?


15-1152220521
Guest06
2006-07-07 01:15
2006.08.06
Драйвер к Web камере


15-1152394199
PATRIOT
2006-07-09 01:29
2006.08.06
как получить нормальное время ?


2-1153297247
SergP.
2006-07-19 12:20
2006.08.06
Настройки дельфи и try except end...


15-1152614987
Александр Иванов
2006-07-11 14:49
2006.08.06
Без коментариев




   Наверх