Конференция "KOL" » WaitForSingleObject [Delphi, Windows]
 
  • zldo (16.04.08 03:03) [0]
    Задача - открыть файл в ассоциированной в системе программе и дождатся завершения этой программы. Решаю таким образом:


    function TImgEditor.OpenPictureThread(Sender: PThread): Integer;
    var
     SI: TShellExecuteInfo;
    begin
     FillChar(SI, SizeOf(SI), 0);
     with SI do
     begin
       cbSize := SizeOf(SI);
       fMask := SEE_MASK_NOCLOSEPROCESS;
       Wnd := Form.Handle;
       lpFile := Sender.Data;
       nShow := SW_SHOW;
     end;
     if ShellExecuteEx(@SI) then WaitForSingleObject(SI.hProcess, INFINITE);
     DeleteFile(Sender.Data);
     FreeMem(Sender.Data);
    end;



    в принципе все работает верно, толко в приложении происходит затык после выполениния WaitForSingleObject по идеи "замирать" должен только поток в котором был вызов этой функции или я что-то путаю?

    поток создает следующий код:

    procedure TImgEditor.OpenPicture;
    var
     FileName: string;
     s: pointer;
    begin
     with NewThread^ do
     begin
       AutoFree := true;
       OnExecute := OpenPictureThread;
       case Id3Tag.Pictures[ImageIndex].PictureFormat of
         pfJpeg: FileName := TempNameValid('.jpg');
         pfPNG:  FileName := TempNameValid('.png');
         else    FileName := TempNameValid('.jpg');
       end;
       if FileName <> '' then
       begin
         SaveImage(FileName);
         GetMem(s, length(FileName) + 10);
         StrCopy(s, PChar(FileName));
         Data := s;
         Resume;
         MsgOK('dfsada'); // проверка есть ли жизнь после смерти
       end;
     end;
    end;

  • zldo (17.04.08 20:47) [1]
    Если кому интересно, то прикол был в строке Wnd := Form.Handle;
    Этого делать не стоило :)
 
Конференция "KOL" » WaitForSingleObject [Delphi, Windows]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]