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

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

CreateProcess


Duncan ©   (2003-07-28 15:08:00) 

Как отследить, что завершился процесс созданный при помощи CreateProcess (вызывает дос-окошко). Спасибо.


Набережных С.   (2003-07-29 17:34:00) [1]

>Duncan (29.07.03 09:58)

Ну, твое дело. "Я прокукарекал, а там хоть не рассветай"


Duncan   (2003-07-29 09:58:00) [2]

>ZZ
Спасибо, за небольшое уточнение, но время все-равно надо уменьшать :-).
>Набережных С.
Результатом вызова CreateProcess является, в моем случае, файл на диске с которым будет работать другая прога. Поэтому задача состоит в том, чтоб запустить CreateProcess, а по его завершению запустить еще раз. Поэтому очень важно освобождать память :-).


Набережных С.   (2003-07-28 20:58:00) [3]

Я не об этом. Если для программы не имеет значение результат вызова CreateProcess, то зачем вообще ее вызывать? А если дальнейший код основывается на предположении, что CreateProcess отработала нормально, то к чему это приведет неизвестно.


ZZ   (2003-07-28 20:44:00) [4]

Ну мы можем либо создать процесс, либо нет. И проверка CreateProcess имхо абсолютно ничего не дает...
WaitForSignleObject отработает в любом случае
CloseHandle тоже ничего фатального не сделают, а дальше про CreateProcess можно забыть (ProcessInformation уже "закрыто")


Набережных С.   (2003-07-28 20:31:00) [5]

Да любые. Этот код ведь не сам по себе будет существовать. Не контролируя результат вызова CreateProcess, можно получить что угодно.


ZZ   (2003-07-28 20:17:00) [6]

Какие, если не секрет?


Набережных С.   (2003-07-28 20:13:00) [7]

>Баги не возможны в принципе

Возможны. Еще как.


ZZ   (2003-07-28 19:59:00) [8]

DWORD WaitForSingleObject(
HANDLE hHandle, // handle to object
DWORD dw Milliseconds // time-out interval
);

dwMilliseconds
[in] Specifies the time-out interval, in milliseconds.


Duncan   (2003-07-28 19:57:00) [9]

Да сутки, т.к. в доке написано вроде, что WaitForSingleObject реагирует либо на завершение процесса, либо на окончание таймера, вот поэтому я так и поставил. Сам процесс в среднем действует около 3 минут.


ZZ   (2003-07-28 19:50:00) [10]

Баги не возможны в принципе.. А вот недокументированные фичи появятся :)) Проверяй что возвращают функции... хотя можно и без этого.

WaitForSignleObject(ProcessInformation.hProcess, 3600*24)=WAIT_OBJECT_0)
Выделенное жирным шрифтом время - это сколько по твоему? Сутки?


Duncan   (2003-07-28 19:40:00) [11]

А какой код является в данном случае более правильным?


Набережных С.   (2003-07-28 18:53:00) [12]

При такомкоде может быть все, что угодно


Duncan   (2003-07-28 18:13:00) [13]

pr - c обратным слешем, проблем с запуском нет, т.е. все идет нормально. Вопрос стоит именно в завершении приложении. При таком коде я действительно смогу поймать момент окончания работы процесса и всю ли память освобожу??


Набережных С.   (2003-07-28 17:46:00) [14]

Проверяй, что возвращает CreateProcess и есть ли завершающий слэш в pr.


Duncan   (2003-07-28 15:40:00) [15]

При использовании следующего кода баги возможны? Если да, то где?

GetStartupInfo(StartupInfo);
with StartupInfo ( nil, PChar(pr+"a.bat")

При использовании следующего кода баги возможны? Если да, то где?

GetStartupInfo(StartupInfo);
with StartupInfo do begin
wShowWindow := SW_HIDE; //не показывать окно
dwFlags := STARTF_USESHOWWINDOW; end;
CreateProcess(nil, PChar(pr+"a.bat"), nil, nil, FALSE, CREATE_NEW_CONSOLE, nil, nil, StartupInfo, ProcessInformation);
if (WaitForSignleObject(ProcessInformation.hProcess,3600*24)=WAIT_OBJECT_0)
then ShowMessage("ok")
else ShowMessage("bad luck");
CloseHandle(ProcessInformation.hProcess);
CloseHandle(ProcessInformation.hThread);


Polevi   (2003-07-28 15:19:00) [16]

WaitForSignleObject(hProcess)


Наверх

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