![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WaitForSingleObject [Delphi, Windows]
zldo © (2008-04-16 03:03:00)Задача - открыть файл в ассоциированной в системе программе и дождатся завершения этой программы. Решаю таким образом:
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 (2008-04-17 20:47:00) [1]Если кому интересно, то прикол был в строке Wnd := Form.Handle;
Этого делать не стоило :)