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

Вниз

Создание процесса и ожидание его окончания   Найти похожие ветки 

 
GIL ©   (2003-03-20 13:05) [0]

Знаю, что этот вопрос уже был, может быть и не один раз, но подставив пример в свою программу ничего не получилось. Программа запускает эксплорер и должна в идеале подождать, пока запускаемое окно закроется, в качестве показателя того, что процесс завершился выдается сообщение, но вся проблема в том, что сообщение выдается во время создания (или после - на глаз не определишь) процесса, а не после его завершения. Ожидание вызывается WaitSimpleProcess


 
cLe0 ©   (2003-03-20 13:40) [1]

не WaitSimpleProcess, а WaitForSingleObject - и все работает ))


...
var
FilePath: string;
lpFile, lpCommandLine, lpCurrentDir: PChar;
lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
bInheritHandles: LongBool;
dwCreationFlags: Integer;
lpEnvironment: Pointer;
lpSI: TStartupInfo;

begin
Result := TRUE;
GetStartupInfo(lpSI);
lpFile := PChar(Path);
lpCommandLine := PChar(CommandLine);
lpProcessAttributes := nil;
lpThreadAttributes := nil;
bInheritHandles := TRUE;
dwCreationFlags := CREATE_DEFAULT_ERROR_MODE;
lpEnvironment := nil;
lpSI.lpReserved := nil;
lpSI.lpDesktop := nil;
lpSI.lpTitle := nil;
lpCurrentDir := PChar(CurrentDir);
lpSI.wShowWindow := SW_NORMAL;
if not CreateProcess(lpFile, lpCommandLine, lpProcessAttributes,
lpThreadAttributes, bInheritHandles, dwCreationFlags,
lpEnvironment, lpCurrentDir, lpSI, lpPI) then
Terminate
else
WaitForSingleObject(lpPI.hProcess, INFINITE);
// Show message
...


 
Юрий Зотов ©   (2003-03-20 14:28) [2]

Есть подозрение, что при попытке повторного запуска (открытии нового окна) Explorer"а в его уже существующем процессе запускается новый поток (в котором это окно и работает), а процесс остается все тот же. Поэтому ждать надо завершения ПОТОКА, а не процесса.


 
AlexVit ©   (2003-03-20 15:22) [3]


> Юрий Зотов ©


А как корректно определить, что поток завершился?


 
Юрий Зотов ©   (2003-03-20 15:55) [4]

Указать WaitForSingleObject хэндл потока.



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

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

Наверх




Память: 0.47 MB
Время: 0.012 c
4-100523
DVM
2003-01-27 09:27
2003.03.31
Хук WH_SHELL и окна консольных приложений / DOS программ


3-100156
Sir Alex
2003-03-12 13:26
2003.03.31
Требуется выбрать вид БД


14-100377
REA
2003-03-13 13:06
2003.03.31
Реклама


6-100361
greenrul
2003-02-06 18:15
2003.03.31
Список internet-соединений.


4-100516
NikolaB
2003-02-01 19:32
2003.03.31
TIME_ZONE_INFORMATION & GetTimeZoneInformation