Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Я наверное тормоз. Ничего догнать не могу. [D6, D7, Win2k, WinXP]


DuhcmanSoft ©   (2004-02-26 10:42:00) 

Взял пример с FAQ вставил его в функцию работает отменно, но получается не все так как хотел бы я, запуск с ожиданием и мертвым висением моей проги.

function WinExecAndWait( Exec: PChar; cmdline: PChar; Patch: PChar): Word;
var si : STARTUPINFO;
   pi : PROCESS_INFORMATION;
begin
 ZeroMemory(@si,sizeof(si));
 si.cb:=SizeOf(si);
 if not CreateProcess( Exec, // No module name (use command line).
    cmdline,         // 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.
    Patch,             // Use parent's starting directory.
   si,              // Pointer to STARTUPINFO structure.
   pi )             // Pointer to PROCESS_INFORMATION structure.
 then
 begin
   ShowMessage('Запуск приложения не возможен!');
   Exit;
 end;
  WaitForSingleObject(pi.hProcess, INFINITE);
 CloseHandle( pi.hProcess );
 CloseHandle( pi.hThread );
end;


 Мне подсказывают вместо
WaitForSingleObject(pi.hProcess, INFINITE);    использовать
MsgWaitForMultipleObjects(pi.hProcess, ..., false, INFINITE, nil);
но я не могу догнать все его параметры особенно ...

 Весь вечер пытался что ли бо подобрать не выходит.
Помогите написать функцию для запуска с ожиданием и возможностью работы в программе из которой производится запуск.


Cobalt   (2004-02-26 12:08:00) [1]

Да, извиняюсь, невнимательно читал сообщение.

В FAQ надо добавить - что, мол, этот вариант блокирует вашу прогу. А этот вариант - нет.


Polevi   (2004-02-26 11:49:00) [2]

не ветка а цирк какойто


DuhcmanSoft   (2004-02-26 11:48:00) [3]

Cobalt ©   (26.02.04 11:46) [12]
Чё-то не пойму, в чём именно проблема?
Ты функцию вызываешь?
Прога запускается?
Пока она работает, твоя прога висит. Всё верно.
Как только она завершится, твоя прога получит управление.

А если нужно что бы было управление до завершения и програ показывала что запущенная прога работает или нет


Polevi   (2004-02-26 11:48:00) [4]

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


DuhcmanSoft   (2004-02-26 11:46:00) [5]

type
  TMyThread = class(TThread)
  protected
    procedure Execute; override;
  end;

procedure TMyThread.Execute;
begin
 WinExecAndWait(EXE_, ParamEXE_,Path_);
end;


Cobalt   (2004-02-26 11:46:00) [6]

Чё-то не пойму, в чём именнопроблема?
Ты функцию вызываешь?
Прога запускается?
Пока она работает, твоя прога висит. Всё верно.
Как только она завершится, твоя прога получит управление.


Polevi   (2004-02-26 11:45:00) [7]

млин..

type
TMyThread=class(TThread)
public
 procedure Execute;override;
end;

{ TMyThread }

procedure TMyThread.Execute;
begin
 WinExecAndWait(...);
end;


DuhcmanSoft   (2004-02-26 11:42:00) [8]

Всей проги ?


Polevi   (2004-02-26 11:41:00) [9]

код свой целиком приведи


DuhcmanSoft   (2004-02-26 11:41:00) [10]

Polevi ©   (26.02.04 11:40) [6]

type
TMyThread=class(TThread)
public
procedure Execute;override;
end;

всё равно ругается


DuhcmanSoft   (2004-02-26 11:40:00) [11]

TMyThread = class(TThread);


Polevi   (2004-02-26 11:40:00) [12]

type
TMyThread=class(TThread)
public
 procedure Execute;override;
end;


Polevi   (2004-02-26 11:39:00) [13]

а какой у тебя базовый класс


DuhcmanSoft   (2004-02-26 11:31:00) [14]

Polevi ©   (26.02.04 11:30) [3]
см TThread

Ругется на procedure Execute; override; типа метод не найден в базе класса


Polevi   (2004-02-26 11:30:00) [15]

см TThread


DuhcmanSoft   (2004-02-26 10:51:00) [16]

Рамиль ©   (26.02.04 10:48) [1]
Так и должно быть, WaitForSingleObject ждет завершения процесса. Надо запускать процесс в отдельном потоке.

Скажи как только желательно с примером


Рамиль   (2004-02-26 10:48:00) [17]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо