Текущий архив: 2009.11.29;
Скачать: CL | DM;
Вниз
WaitForSingleObject Найти похожие ветки
← →
zldo (2008-04-16 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 (2008-04-17 20:47) [1]Если кому интересно, то прикол был в строке Wnd := Form.Handle;
Этого делать не стоило :)
Страницы: 1 вся ветка
Текущий архив: 2009.11.29;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.004 c