Текущий архив: 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.48 MB
Время: 0.008 c