Metoda THotPDF.RenderLoadedPagesParallelOrdered

Compilează și randează concurent paginile încărcate, livrând bitmap-urile finalizate în ordinea intrării printr-un callback delimitat pe thread-ul apelant

Declarație

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 and ownership

Callback rulează serial pe thread-ul apelant, cu poziția de intrare de la zero, indexul paginii cerute, bitmap-ul împrumutat și flag-ul de anulare

Bitmap-ul este valid doar pe durata callback-ului și este eliberat imediat după ce callback-ul se întoarce, așa că copiați-l sau codați-l în callback dacă rezultatul trebuie să supraviețuiască acelei invocări

Setați Cancel pentru a înceta revendicarea de pagini noi, a trezi worker-ii blocați, a aștepta lucrul în curs, a elibera rezultatele nepublicate și a returna numărul de callback-uri finalizate

Anularea din callback trezește și worker-ii care așteaptă o rezervare de memorie, fără a transforma acel semnal intern de trezire într-o eroare; un token extern de anulare sau o excepție din callback raportează în continuare eșec după curățare

Backpressure

OutputQueueDepth limitează bitmap-urile finalizate, inclusiv cel activ în callback; valorile sub unu aleg numărul efectiv de worker-i, iar valorile peste numărul de pagini sunt limitate la acesta

Scheduler-ul rezervă capacitate de ieșire pentru următoarea poziție de intrare necesară, astfel că paginile ulterioare nu pot umple coada și bloca progresul ordonat când o pagină anterioară se compilează mai lent

Cu PeakMemorySchedulerEnabled, paralelismul cerut este redus pe baza celei mai mari estimări de pagină și a bugetului global disponibil în acel moment, iar fiecare rezervare de pagină rămâne activă din momentul revendicării lucrului până când bitmap-ul împrumutat părăsește callback-ul

Rezervările de memorie sunt cerute în ordinea intrării înainte de compilarea și randarea paralelă, astfel că paginile ulterioare nu pot lua bugetul de care are nevoie următorul callback

Ieșirea aflată în coadă concurează astfel în mod echitabil cu compilarea și redarea active pentru același buget la nivel de proces, iar anularea sau eșecul eliberează rezervările nepublicate înainte de a aștepta worker-ii

Callback-ul nu trebuie să modifice și nici să distrugă documentul cât timp worker-ii sunt activi

THPDFParallelRenderPipelineInfo · Display Lists and Print Production