Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.06;
Скачать: 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 вся ветка

Текущий архив: 2006.08.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
15-1152692547
DevilDevil
2006-07-12 12:22
2006.08.06
Быстрая компиляция Builder-a


2-1153426580
Батыр
2006-07-21 00:16
2006.08.06
Текстовый Массив


2-1153298958
Darkwing
2006-07-19 12:49
2006.08.06
Подключение к MS SQL


2-1152855604
pushkin42
2006-07-14 09:40
2006.08.06
Совместимость NT систем???


15-1151863187
Handle
2006-07-02 21:59
2006.08.06
Люди поздравьте меня