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