Zitat von
mkinzler:
Lagere mal den Aufruf in einen eigene Thread aus. dann belibet deine
GUI zumindest zugreifbar.
Nicht nur das, es ist sogar die Lösung für das Problem mit der modifizierten Version von bbMPEG. Vielen dank.
Mit Threads habe ich bisher nur wenig zu tun gehabt. Ich hoffe, das sieht jetzt nicht ganz so stümperhaft aus:
Delphi-Quellcode:
function TbbMPEG.Execute: Integer;
type
TThreadParams = record
fbbMPEGMakeMPEG : TFNbbMPEGMakeMPEG;
fOutputFile : String;
end;
PThreadParams = ^TThreadParams;
var
ThreadParams: PThreadParams;
hThread : THandle;
ThreadID : Cardinal;
wf : DWORD;
function Thread(p: PThreadParams): Integer;
var
makeMPEGInfo : TmakeMPEGRecInfo;
begin
FillChar(makeMPEGInfo, SizeOf(makeMPEGInfo), 0); // zero the buffer
makeMPEGInfo.outputFilename := PChar(PThreadParams(P)^.fOutputFile); // output MPEG filename
Result := PThreadParams(P)^.fbbMPEGMakeMPEG(@makeMPEGInfo); // call the makeMPEG routine to create an MPEG
FreeMem(p, sizeof(TThreadParams));
end;
begin
Result := -1;
if GetEntryPoints
and (fbbMPEGInit = 0)
then begin
fbbMPEGSetFocus; // does not need to be called, just there if needed
GetMem(ThreadParams, sizeof(TThreadParams));
ThreadParams.fOutputFile := fOutputFilename;
ThreadParams.fbbMPEGMakeMPEG := fbbMPEGMakeMPEG;
hThread := BeginThread(nil, 0, @Thread, ThreadParams, 0, ThreadID);
if hThread <> INVALID_HANDLE_VALUE
then begin
while WaitForSingleObject(hThread, 1000) = WAIT_TIMEOUT
do Application.ProcessMessages;
WaitForSingleObject(hThread, INFINITE);
end;
end;
end;