Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.021 c
3-1080231798
and
2004-03-25 19:23
2004.04.25
Список таблиц SQL запросом


1-1081326795
Ivan
2004-04-07 12:33
2004.04.25
уничтожение формы


4-1077791877
mr.Tim
2004-02-26 13:37
2004.04.25
TService и Application.ExeName ?


11-1064827222
ASilver
2003-09-29 13:20
2004.04.25
Проблема с Bitmap


1-1081630305
Klopan
2004-04-11 00:51
2004.04.25
команда net send user message




   Наверх