THotPDF.RenderLoadedPagesParallelOrdered Method
Kompiluje i renderuje wczytane strony współbieżnie, dostarczając ukończone bitmapy w kolejności wejściowej przez ograniczony callback na wątku wywołującym
Deklaracja
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 i własność
Callback działa szeregowo na wątku wywołującym i otrzymuje pozycję wejściową liczona od zera, żądany indeks strony, pożyczoną bitmapę oraz flagę anulowania
Bitmapa jest ważna tylko przez czas trwania callbacku i jest zwalniana bezpośrednio po jego powrocie, więc jeśli wynik ma przetrwać to wywołanie, skopiuj albo zakoduj go wewnątrz callbacku
Ustaw Cancel, żeby przestać przyznawać nowe strony, obudzić zablokowane workery, dołączyć pracę w toku, zwolnić nieopublikowane wyniki i zwrócić liczbę ukończonych wywołań callbacku
Anulowanie callbacku budzi też workery czekające na rezerwację pamięci, nie zamieniając tego wewnętrznego wybudzenia w błąd; zewnętrzny token anulowania albo wyjątek callbacku nadal raportuje porażkę po posprzątaniu
Backpressure
OutputQueueDepth ogranicza liczbę ukończonych bitmap, łącznie z bitmapą aktywną w callbacku; wartości poniżej jedyny wybierają efektywną liczbę workerów, a wartości powyżej liczby stron są przycinane
Scheduler rezerwuje miejsce wyjściowe dla następnej wymaganej pozycji wejściowej, więc późniejsze strony nie mogą zapełnić kolejki i zablokować uporządkowanego postępu, gdy wcześniejsza strona kompiluje się wolniej
Przy włączonym PeakMemorySchedulerEnabled żądana równoległość jest redukowana na podstawie największego szacunku strony i aktualnie dostępnego globalnego budżetu, a rezerwacja każdej strony pozostaje aktywna od przyznania pracy do momentu, gdy jej pożyczona bitmapa opuści callback
Rezerwacje pamięci są żądane w kolejności wejścia przed równoległą kompilacją i renderowaniem, więc późniejsze strony nie mogą zabrać budżetu potrzebnego następnemu callbackowi
Skolejkowane wyjście konkuruje więc sprawiedliwie o ten sam budżet całego procesu z aktywną kompilacją i odtwarzaniem, a anulowanie albo błąd zwalnia nieopublikowane rezerwacje przed dołączeniem workerów
Callback nie może modyfikować ani niszczyć dokumentu, dopóki workery są aktywne
THPDFParallelRenderPipelineInfo · Listy wyświetlania i produkcja poligraficzna