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