Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.011 c
2-1152859528
T54
2006-07-14 10:45
2006.08.06
Добавление bmp к exe . . .


4-1144268716
polyarnik
2006-04-06 00:25
2006.08.06
Открыть Открытый COM порт


2-1153132968
Megabyte
2006-07-17 14:42
2006.08.06
Непонятки в 3-хзвенке


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


2-1153375514
rosl
2006-07-20 10:05
2006.08.06
формат 1С





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский