![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Особенности запуска процесса [D7, WinXP]
Darvin © (2006-06-23 11:39:00)Здравствуйте.
Мне надо запустить процесс и дождаться окончания его выполнения. Я делаю так:
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, который должен работать при работе стороннего процесса. А он не работает.
Вопрос.
Как правильно организовать вызов внешнего процесса, дождаться окончания его выполнения, но так, чтобы параллельные потоки моего приложения при этом работали?
isasa (2006-06-24 10:54:00) [1]А что, нельзя CreateProcess оформить в отдельном потоке, а не в главном?
Юрий Зотов (2006-06-24 08:29:00) [2]> Как правильно организовать вызов внешнего процесса, дождаться
> окончания его выполнения, но так, чтобы параллельные потоки моего
> приложения при этом работали?
Так, как у Вас и сделано, только в отдельном потоке. WaitForSingleObject усыпляет только тот поток, из которого она была вызвана, а все остальные будут работать.
Поэтому в [1] написано верно - если другой поток у Вас тоже переходит в ожидание, значит, он получился как-то завязанным с первым.
Сергей М. (2006-06-23 11:40:00) [3]
> у меня в приложении есть дополнительный поток TThread, который
> должен работать при работе стороннего процесса. А он не
> работает
Значит у тебя ошибка в программе.