THotPDF.RenderLoadedPagesParallelOrdered-Methode

Kompiliert und rendert geladene Seiten nebenläufig und liefert fertige Bitmaps in Eingabereihenfolge über einen begrenzten Callback im aufrufenden Thread

Deklaration

function RenderLoadedPagesParallelOrdered(
    const PageIndices: array of Integer; DPI, MaxConcurrency,
    OutputQueueDepth: Integer; Callback: THPDFParallelRenderPageEvent): Integer; overload;

function RenderLoadedPagesParallelOrdered(
    const PageIndices: array of Integer; DPI, MaxConcurrency,
    OutputQueueDepth: Integer; Callback: THPDFParallelRenderPageEvent;
    out Info: THPDFParallelRenderPipelineInfo): Integer; overload;

Callback und Besitz

Callback läuft seriell auf dem aufrufenden Thread und erhält die nullbasierte Eingabeposition, den angeforderten Seitenindex, die geliehene Bitmap und das Abbruch-Flag

Die Bitmap ist nur für die Dauer des Callbacks gültig und wird unmittelbar nach dessen Rückkehr freigegeben; kopieren oder kodieren Sie sie daher innerhalb des Callbacks, wenn das Ergebnis diesen Aufruf überdauern soll

Setzen Sie Cancel, um das Anfordern neuer Seiten zu stoppen, blockierte Worker aufzuwecken, laufende Arbeit zu joinen, unveröffentlichte Ergebnisse freizugeben und die Anzahl abgeschlossener Callbacks zurückzuliefern

Der Callback-Abbruch weckt auch Worker, die auf eine Speicherreservierung warten, ohne diesen internen Wake-up in einen Fehler zu verwandeln; ein externes Cancellation-Token oder eine Callback-Ausnahme meldet nach dem Aufräumen weiterhin einen Fehler

Backpressure

OutputQueueDepth begrenzt fertige Bitmaps einschließlich der im Callback aktiven Bitmap; Werte unter eins wählen die effektive Worker-Anzahl, Werte über der Seitenanzahl werden begrenzt

Der Scheduler reserviert Ausgabekapazität für die nächste erforderliche Eingabeposition, sodass spätere Seiten die Queue nicht füllen und den geordneten Fortschritt blockieren können, wenn eine frühere Seite langsamer kompiliert

Mit PeakMemorySchedulerEnabled wird die angeforderte Parallelität vom größten Seitenschätzwert und dem aktuell verfügbaren globalen Budget abgeleitet, und jede Seitenreservierung bleibt vom Work-Claim bis zum Verlassen der geliehenen Bitmap aus dem Callback aktiv

Speicherreservierungen werden vor der parallelen Kompilierung und dem Rendering in Eingabereihenfolge angefordert, sodass spätere Seiten nicht das Budget abgreifen können, das der nächste Callback braucht

Eingereihte Ausgabe konkurriert daher fair mit aktiver Kompilierung und Wiedergabe um dasselbe prozessweite Budget, während Abbruch oder Fehlschlag unveröffentlichte Reservierungen vor dem Joinen der Worker freigibt

Der Callback darf das Dokument nicht verändern oder zerstören, solange Worker aktiv sind

THPDFParallelRenderPipelineInfo · Display Lists und Print Production