Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как дождаться завершения запущенной программы? [D5, Win95/98]


denvor ©   (2002-10-03 01:03:00) 

Всем нам до боли знаком этот пример:


procedure TForm1.Button1Click(Sender: TObject);var si:STARTUPINFO; pi:PROCESS_INFORMATION; cmdline:string;begin ZeroMemory(@si,sizeof(si)); si.cb:=SizeOf(si); cmdline:="c:\command.com"; if not CreateProcess( nil, // No module name (use command line). PChar(cmdline), // Command line. 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, // Pointer to STARTUPINFO structure. pi ) // Pointer to PROCESS_INFORMATION structure. then begin ShowMessage( "CreateProcess failed." ); Exit; end; WaitForSingleObject( pi.hProcess, INFINITE ); CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); ShowMessage("Done !");end;
Но вот вопрос: как избавиться от засыпания программы, запустившей приложение и ожидающую его завершение, пока работает функция WaitForSingleObject?


han_malign   (2002-10-03 16:43:00) [1]

просто запомнить pi.hProcess и проверять состояние просесса только в критичной, по его завершению, части программы (скажем там где нужно обрабатывать результаты процесса), если нужно постоянно отслеживать состояние - то по таймеру
З.Ы. не забыть закрыть handle-ы после окончания процесса, или по завершению программы.


Юрий Зотов   (2002-10-03 16:21:00) [2]

> и вызывать WaitForSingleObject вместе с
> application.processmessages, или чем то в этом роде.

И это называется - MsgWaitForMultiplyObjects.


Proton_   (2002-10-03 15:08:00) [3]

либо заменить INFINITE на число милисекунд ожидания
и вызывать WaitForSingleObject вместе с application.processmessages, или чем то в этом роде.


Юрий Зотов   (2002-10-03 11:42:00) [4]

Пример по TThread есть в справке, а текст метода Execute у Вас уже имеется - тот самый , что Вы привели.


Denvor   (2002-10-03 10:28:00) [5]

А можно примерчик?


Юрий Зотов   (2002-10-03 02:14:00) [6]

Выполнить этот же код в дополнительном потоке.


Наверх

Титульная страница Поиск, карта сайта Написать письмо