MDX - Sa 21.03.09 03:44
Titel: WaitForSingleObject Problem!
Hallo, liebe DF Community: wie bereits
hier [
http://www.delphi-forum.de/viewtopic.php?t=83555] schon nebenbei geschrieben:
Wenn man ein Video encodieren lassen will, erscheint ein Hinweis Fenster und mit
WaitForSingleObject wird auf das Ende von ffmpeg gewartet.
Nach dem Encodieren
soll sich das Fenster wieder schließen!
Bei mir (WinVista 32 Bit - ~
12 Ghz - 4GB Ram) funktioniert das auch ohne Probleme.
Bei meinem Laptop (WinVista 32 Bit - ~
4.5 Ghz - 4 GB Ram), schließt sich das Hinweisfenster nicht, auch wenn der Prozess (ffmpeg.exe) schon nicht mehr läuft!
Hat jmd. eine Idee???
(Das WaitForSingleObject ist in ne andere Funktion gepackt, wens Interessiert!)
THX schonmal
MDX - Sa 21.03.09 12:12
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| function ExecAndWait(const Filename, Params: string; WindowState: word): boolean; {$IFDEF WIN32} var SUInfo: TStartupInfo; ProcInfo: TProcessInformation; CmdLine: string; begin CmdLine := '"' + Filename + '" ' + Params; FillChar(SUInfo, SizeOf(SUInfo), #0); with SUInfo do begin cb := SizeOf(SUInfo); dwFlags := STARTF_USESHOWWINDOW; wShowWindow := WindowState; end; Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL, PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
if Result then WaitForSingleObject(ProcInfo.hProcess, INFINITE); {$ELSE} var InstanceID : THandle; Buff: array[0..255] of char; begin StrPCopy(Buff, Filename + ' ' + Params); InstanceID := WinExec(Buff, WindowState); if InstanceID < 32 then Result := FALSE else begin Result := TRUE; repeat Application.ProcessMessages; until Application.Terminated or (GetModuleUsage(InstanceID) = 0); end; end; |
Das istz die Funktion, die so aufgerufen wird:
Delphi-Quelltext
1:
| ExecAndWait(ExtractFilePath(ParamStr(0))+'data/ffmpeg.exe', 'PARAMETER ZUM ENCODIEREN' , sw_hide); |
Vllt. werdet ihr/ wirst du ja daraus schlauer =)
jaenicke - Sa 21.03.09 15:03
Hmm, auf den ersten Blick fällt mir da auch nichts auf.
Du könntest einfach mal andere Varianten ausprobieren. Auch wenn ich diese eigentlich für recht gut gehalten hätte, aber andererseits blockiert die auch dein Programm. Hier findest du z.B. auch nicht blockierende:
http://www.swissdelphicenter.ch/torry/showcode.php?id=93