THotPDF.RenderLoadedPagesParallelOrdered Method
Compila e renderiza páginas carregadas em simultâneo, entregando os bitmaps concluídos pela ordem de entrada através de um callback limitado na thread chamadora
Declaração
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 é executado em série na thread chamadora com a posição de entrada com base zero, o índice de página pedido, o bitmap emprestado e o flag de cancelamento
O bitmap só é válido durante o callback e é libertado imediatamente depois de o callback devolver, pelo que deve copiá-lo ou codificá-lo dentro do callback quando o resultado tiver de sobreviver a essa invocação
Defina Cancel para deixar de reclamar páginas novas, acordar os workers bloqueados, fazer join do trabalho em curso, libertar os resultados não publicados e devolver o número de callbacks concluídos
O cancelamento pelo callback também acorda os workers à espera de uma reserva de memória sem transformar esse despertar interno num erro; um token de cancelamento externo ou uma exceção no callback continua a reportar falha após a limpeza
Backpressure
OutputQueueDepth limita os bitmaps concluídos, incluindo o bitmap ativo no callback; valores abaixo de um selecionam o número efetivo de workers e valores acima do número de páginas são limitados a este
O scheduler reserva capacidade de saída para a posição de entrada seguinte necessária, pelo que páginas posteriores não podem encher a fila e bloquear o avanço ordenado quando uma página anterior demora mais a compilar
Com PeakMemorySchedulerEnabled, o paralelismo pedido é reduzido a partir da maior estimativa de página e do orçamento global atualmente disponível, e cada reserva de página permanece ativa desde a reclamação do trabalho até o bitmap emprestado sair do callback
As reservas de memória são pedidas pela ordem de entrada antes da compilação e renderização paralelas, pelo que páginas posteriores não podem consumir o orçamento de que o callback seguinte precisa
A saída em fila compete, assim, de forma equitativa com a compilação e a reprodução ativas pelo mesmo orçamento ao nível do processo, enquanto o cancelamento ou uma falha libertam as reservas não publicadas antes do join dos workers
O callback não pode modificar nem destruir o documento enquanto os workers estiverem ativos
THPDFParallelRenderPipelineInfo · Listas de apresentação e produção de impressão