Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > WaitForSingleObject


Автор: Spawn 27.12.2002, 22:52
Если я хочу подождать переход процесса в активное состояеие, то какои параметр нужно ставить в hHandle? Дескриптор процесса?

Автор: Technoboss 30.12.2002, 11:02
Привет!

DWORD WaitForSingleObject(

   HANDLE hHandle, // handle of object to wait for
   DWORD dwMilliseconds // time-out interval in milliseconds  
  );


Parameters

hHandle

Identifies the object. For a list of the object types whose handles can be specified, see the following Remarks section.
Windows NT: The handle must have SYNCHRONIZE access. For more information, see Access Masks and Access Rights.

Автор: Song 30.12.2002, 17:47
Вам нужен WaitForInputIdle()

Автор: Technoboss 3.1.2003, 11:17
Привет!

Код
function ExecAndWait(const FileName, Params: ShortString; const WinState: Word): Boolean; export;
var 
  StartInfo: TStartupInfo; 
  ProcInfo: TProcessInformation; 
  CmdLine: ShortString; 
begin 
  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(StartInfo, SizeOf(StartInfo), 0); 
  with StartInfo do 
  begin 
    cb := SizeOf(StartInfo);
    dwFlags := STARTF_USESHOWWINDOW; 
    wShowWindow := WinState; 
  end; 
  Result := CreateProcess(Nil, PChar( String( CmdLine ) ), Nil, Nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, Nil,
                          PChar(ExtractFilePath(Filename)), StartInfo,ProcInfo);

  if Result then 
  begin 
    WaitForSingleObject(ProcInfo.hProcess, INFINITE); 
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread); 
  end; 
end;

Кусок кода, который вызывает ф-цию содержащую WaitForSingleObject
В данном примере запускается исполняемый файл _set.ex_ , а наша
программа минимизируется и ждет пока не закончит работать _set.ex_ ,
а затем восстанавливается. APath - директория, где находиться
файл _set.ex_  . 
...........
Application.Minimize;
try
  SetCurrentDir(Apath);
  ExecAndWait(APath + '_set.ex_', '', SW_SHOW);
finally
  Application.Restore;
end;

.................

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)