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

Вниз

Как "оживить" прогу во время выполнения другого приложения   Найти похожие ветки 

 
Tornado ©   (2004-04-07 09:57) [0]

Запускаю на выполнение другое приложение с определенными параметрами из своей проги с помощью CreateProcess:


function CreatePr(Path_AdmProg,  Paramm: PChar): Boolean;
var
 si: STARTUPINFO;
 pi: PROCESS_INFORMATION;
begin
 ZeroMemory(@si,sizeof(si));
 si.cb:=SizeOf(si);
   if not CreateProcess(Path_AdmProg, { module name. }
          Paramm,                     { 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
     MessageBox(Application.Handle,PChar("Не могу запустить процесс!."),PChar("Error"),MB_ICONSTOP);
     Result := False;
     Exit;
 end;
     WaitForSingleObject( pi.hProcess, INFINITE );
     CloseHandle( pi.hProcess );
     CloseHandle( pi.hThread );
     Result := True;
end;


Во время работы запущенного приложения моя прога как бы подвисает, как только запущенное приложение заканчивает свою работу и закрывает окно моя прога снова "оживает". Вопрос как сделать так чтобы во время работы другого приложения можно было так же работать и с моей прогой? Пробовал вставить Application.ProcessMessages - не помогает...


 
Vlad ©   (2004-04-07 10:06) [1]


>      WaitForSingleObject( pi.hProcess, INFINITE );

Вот это не о чем не говорит ?


 
Tornado ©   (2004-04-07 10:13) [2]

>>> Vlad ©   (07.04.04 10:06) [1]

есть подозрение что тут надо изменить но как?


 
Developerr ©   (2004-04-07 10:17) [3]

А если ввобще убрать эту строку?


 
Bel ©   (2004-04-07 10:17) [4]

Убери вообще эту строчку.


 
Vlad ©   (2004-04-07 10:19) [5]


> Tornado ©   (07.04.04 10:13) [2]

Можно просто убрать. Но только если ты уверен что твоя программа будет работать корректно, не дождавшись завершения процесса.


 
Digitman ©   (2004-04-07 10:22) [6]


> Пробовал вставить


интересно, и куда "пробовал" ? тут и цикла-то нет ..

если тебе не требуется дожидаться , пока порожденный процесс завершит свою работу, просто убери Wait-ф-цию

если требуется ждать и одновременно реагировать на сообщения пользовательскому интерфейсу твоего приложения, используй MsgWaitForMultipleObjects()


 
Vitaly ©   (2004-04-07 10:23) [7]

while WaitForSingleObject( pi.hProcess, 300 ) = WAIT_TIMEOUT do
 application.processMessages;


 
Tornado ©   (2004-04-07 10:32) [8]

в том то и дело что после отработки внешнего приложения создается определенный файл который потом выводит моя прога в Memo...вообщем без этой строки не получается, будет ошибка потому что файла необходимого пока нет


 
Tornado ©   (2004-04-07 10:41) [9]

спасибо всем! получилось



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

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

Наверх




Память: 0.49 MB
Время: 0.024 c
9-1066578502
vitalick
2003-10-19 19:48
2004.04.25
Книги


1-1081086405
Виталий
2004-04-04 17:46
2004.04.25
Как разбить файл на равные части?


1-1081254208
hgd
2004-04-06 16:23
2004.04.25
Перемещение компонента внутри другого


1-1081425345
DL
2004-04-08 15:55
2004.04.25
Цветной текст


1-1081274081
GanibalLector
2004-04-06 21:54
2004.04.25
StringGrid