Método THotPDF.RenderLoadedPagesParallelOrdered
Compila y renderiza páginas cargadas concurrentemente mientras entrega los bitmaps completados en orden de entrada a través de un callback acotado en el hilo que llama
Declaración
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 y propiedad
Callback se ejecuta en serie en el hilo que llama con la posición de entrada base cero, el índice de página solicitado, el bitmap prestado y la bandera de cancelación
El bitmap es válido solo durante el callback y se libera inmediatamente después de que el callback retorna, así que cópielo o codifíquelo dentro del callback cuando el resultado deba sobrevivir a esa invocación
Active Cancel para dejar de reclamar páginas nuevas, despertar workers bloqueados, esperar el trabajo en vuelo, liberar resultados no publicados y devolver la cantidad de callbacks completados
La cancelación del callback también despierta a los workers que esperan una reserva de memoria sin convertir ese despertar interno en un error; un token de cancelación externo o una excepción del callback siguen reportando fallo después de la limpieza
Contrapresión
OutputQueueDepth limita los bitmaps completados incluido el bitmap activo en el callback; valores menores a uno seleccionan el conteo efectivo de workers y valores mayores al conteo de páginas se recortan
El scheduler reserva capacidad de salida para la siguiente posición de entrada requerida, así que páginas posteriores no pueden llenar la cola y bloquear el progreso ordenado cuando una página anterior compila más lento
Con PeakMemorySchedulerEnabled, el paralelismo solicitado se reduce desde la estimación de la página más grande y el presupuesto global disponible al momento, y cada reserva de página permanece activa desde la reclamación del trabajo hasta que su bitmap prestado sale del callback
Las reservas de memoria se solicitan en orden de entrada antes de la compilación y renderización paralelas, así que las páginas posteriores no pueden quedarse con el presupuesto que necesita el siguiente callback
La salida en cola compite entonces de forma justa con la compilación y reproducción activas por el mismo presupuesto de todo el proceso, mientras que la cancelación o un fallo libera las reservas no publicadas antes de esperar a los workers
El callback no debe mutar ni destruir el documento mientras haya workers activos
THPDFParallelRenderPipelineInfo · Display Lists y producción de impresión