Главная страница
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.47 MB
Время: 0.068 c
2-1152863390
Евгений2003
2006-07-14 11:49
2006.08.06
Как управлять USB портом через delphi?


15-1152537068
syte_ser78
2006-07-10 17:11
2006.08.06
маленький цифровик


8-1139576813
DelphiLexx
2006-02-10 16:06
2006.08.06
Моделирование и Delphi


1-1151172238
AlexeyT
2006-06-24 22:03
2006.08.06
Fatal: Internal error: L1496


15-1152268054
sam11
2006-07-07 14:27
2006.08.06
Контейнер графических объектов