Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.13;
Скачать: CL | DM;

Вниз

CreateProcess   Найти похожие ветки 

 
Duncan   (2003-07-28 15:08) [0]

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


 
Polevi ©   (2003-07-28 15:19) [1]

WaitForSignleObject(hProcess)


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

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

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);


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

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


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

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


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

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


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

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


 
ZZ ©   (2003-07-28 19:50) [7]

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

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


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

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


 
ZZ ©   (2003-07-28 19:59) [9]

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

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


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

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

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


 
ZZ ©   (2003-07-28 20:17) [11]

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


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

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


 
ZZ ©   (2003-07-28 20:44) [13]

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


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

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


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

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


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

>Duncan (29.07.03 09:58)

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



Страницы: 1 вся ветка

Текущий архив: 2003.10.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
3-40268
Aleksey V.P.
2003-09-22 10:33
2003.10.13
Null значения в поля таблицы (D5, D6, D7, ADO, dBase IV)


4-40728
k@rt
2003-08-08 15:58
2003.10.13
Меню и подменю


1-40362
Relaxxx
2003-10-01 17:39
2003.10.13
Убрать все пробелы с строки?????


14-40608
beginner_nostra
2003-09-25 01:36
2003.10.13
Siemens C55 в качестве GPRS модема


7-40685
drum'n'bass
2003-07-29 11:39
2003.10.13
событие на вход юзера в систему.