Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2011, 02:05   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
Смущение CreateProcess,WaitForSingleObject и внезапное желание закрыться у наблюдаемой программы, как ловить?

всем доброго времени суток!

Сабж:
в потоке TThread через CreateProcess запускаю программу, при помощи WainForingleObject(ProcessInformati on.hProcess,INFINITE) ожидаю завершения...

Проблема:
Ситуация, программа(чкжая запущена) все хорошо, но вот программа незапно закрылась...
Как это ловить?

Предпологаю надо ловить сообщение от WaitForSingleObject , но какое?
WAIT_TIMEOUT?

Подскажите правельно ли я думаю? Или надо как-то по другому?

P.S. голова уже не варит
Человек_Борща вне форума Ответить с цитированием
Старый 24.01.2011, 14:48   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Что значит "внезапно"? Чем это отличается от "не внезапно"? Тем что ты не ожидал? Тогда ответ на этот вопрос потребует от программы наличия телепатических способностей.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 24.01.2011, 15:38   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

под внезапно имелось ввиду, пользователь взял и закрыл наблюдаемую программу, а в моей программе показно что "работает" , так не должно быть...
Человек_Борща вне форума Ответить с цитированием
Старый 24.01.2011, 16:16   #4
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

WaitForSingleObject, как следует из названия, ждёт, т.е. не возвращает управление пока объект, в данном случае дескриптор процесса, не перейдёт в сигнальное состояние (или не пройдёт указанное время)

Код:
type

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TMyThread.Execute;
Var SI: _STARTUPINFOA;
    PI: _PROCESS_INFORMATION;
begin
  inherited;
  With TOpenDialog.Create(Form1) do
  begin
    Filter := 'exe|*.exe';
    If Execute then
    Begin
      GetStartupInfo(SI);
      CreateProcess(PChar(Filename), '', nil, nil, true, CREATE_DEFAULT_ERROR_MODE, nil, nil, SI, PI);
      WaitForSingleObject(PI.hProcess,INFINITE);
      Closehandle(PI.hProcess);
      CloseHandle(PI.hThread);
      ShowMessage('Process terminated')
    End;
    Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TMyThread.Create(false) do FreeOnTerminate:=true;
end;
пыщь

Последний раз редактировалось JTG; 24.01.2011 в 16:23.
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как прикрутить WaitForSingleObject к окончанию потока TwiX Общие вопросы Delphi 5 16.09.2010 19:20
как "ловить мышку" после ответа HTCAPTION на WM_NCHITTEST Ruzzz Win Api 5 15.10.2008 20:31
Как "Ловить" сообщения приложения? Air Win Api 5 26.02.2008 19:26
TWebBrowser-как перехватить команду скрипта для закрытия окна и не дать ему закрыться Вовик Компоненты Delphi 5 03.10.2007 12:17