"_hunter" <19952@news.rsdn.ru> сообщил/сообщила в новостях следующее:
news:499737@news.rsdn.ru...
S>В каком смысле завершения? Что за компонент?
в моем случае форма запускает процесс(при запуске она должна заснуть) и при
завершении этого процесса форма должна проснутся.
WaitForSingleObject
Posted via RSDN NNTP Server 1.8 beta
>>а что такое WaitForSingleObject ?
>То что ты хочешь, ожидание окончания процесса.
я имел в виду как его ипользовать
в свойствах формы у меня такого метода нет и в свойствах потока он тоже отсутсвует.
Здравствуйте, _hunter, Вы писали:
_>как сделать аналог ShowModal?
ShowModal.
_>т.е. мне нужно чтобы форма ожидала завершения созданного ею компонента.
В каком смысле завершения? Что за компонент?
_>Заранее благодарю за ответ.
Заранее благодарен за более подробное изложение вопроса.
... << RSDN@Home 1.1.2 beta 2 >>
"_hunter" <19952@news.rsdn.ru> сообщил/сообщила в новостях следующее:
news:499754@news.rsdn.ru...
AP>WaitForSingleObject
а что такое WaitForSingleObject ?
То что ты хочешь, ожидание окончания процесса.
Posted via RSDN NNTP Server 1.8 beta
Здравствуйте, _hunter, Вы писали:
_>в моем случае форма запускает процесс(при запуске она должна заснуть) и при завершении этого процесса форма должна проснутся.
использовать функцию WaitFor на хэндле этого процесса.
... << RSDN@Home 1.1.2 beta 2 >>
Здравствуйте, _hunter, Вы писали:
_>я имел в виду как его ипользовать
_>в свойствах формы у меня такого метода нет и в свойствах потока он тоже отсутсвует.
А зачем он тебе в свойствах формы или в свойствах потока? Ты же по кнопке пытаешься другой процесс запустить? Вот напиши хоть прямо в обработчике этой формы
WaitForSingleObject
и нажми на нем F1. Там все написано.
... << RSDN@Home 1.1.2 beta 2 >>
Здравствуйте, _hunter, Вы писали:
S>>В каком смысле завершения? Что за компонент?
_>в моем случае форма запускает процесс(при запуске она должна заснуть) и при завершении этого процесса форма должна проснутся.
Полностью "заснувшая" форма производит впечатление умершей.
IMHO, проще модально показать "ожидающую форму", примерно такую:
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm2 = class(TForm)
..
private
{ Private declarations }
ncount : DWord;
FHandles: array [0..MAXIMUM_WAIT_OBJECTS-1] of THandle;
procedure WMUser(var msg: TMessage); message WM_USER;
public
function WaitHandles(const Handles: array of THandle): Longint; virtual;
{ Public declarations }
end;
const
IDWAIT = 256;
implementation
{$R *.DFM}
procedure TForm2.WMUser;
var
waitresult: DWord;
begin
Application.ProcessMessages;
if (ModalResult <> 0) then
Exit;
waitresult := MsgWaitForMultipleObjects( ncount,
FHandles,
False,
INFINITE,
QS_ALLINPUT );
if (waitresult = WAIT_OBJECT_0 + ncount) then
PostMessage(Handle, WM_USER, 0, 0)
else
ModalResult := IDWAIT + waitresult;
end;
function TForm2.WaitHandles;
begin
ncount := High(Handles)-Low(Handles)+1;
Move(Handles[0], FHandles[0], ncount* SizeOf(THandle));
PostMessage(Handle, WM_USER, 0, 0);
Result := ShowModal;
end;
Убирем форму из списка автосоздаваемых, а показывать будем так
with TForm2.Create(nil) do
try
case WaitHandles([pi.hProcess]) of
IDCANCEL: {форма закрыта кнопкой} ;
..
IDWAIT+WAIT_FAILED: {Ошибка функции ожидания};
..
IDWAIT+WAIT_OBJECT_0: {Сигналит hProcess};
..
end;
finally
Free;
end;