Thema: Delphi bbMPEG.DLL verwenden

Einzelnen Beitrag anzeigen

Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#3

Re: bbMPEG.DLL verwenden

  Alt 4. Jul 2009, 19:20
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;
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat