![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как дождаться завершения запущенной программы? [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]Выполнить этот же код в дополнительном потоке.