THotPDF.RenderLoadedPagesParallelOrdered メソッド
読み込みページを並列にコンパイル・描画しながら、完成したビットマップを上限付きの呼び出しスレッド callback 経由で入力順に受け渡します
宣言
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 と所有権
Callback は呼び出しスレッド上で逐次実行され、0 始まりの入力位置、要求されたページインデックス、借用ビットマップ、キャンセルフラグを受け取ります
ビットマップは callback の実行中だけ有効で、callback が返ると直ちに解放されます。結果をその呼び出しより長く残す必要があれば callback 内でコピーまたはエンコードしてください
Cancel を設定すると新しいページの要求を止め、ブロックされたワーカーを起こし、実行中の作業を合流させ、未公開の結果を解放し、完了した callback の数を返します
callback によるキャンセルは、メモリ予約を待っているワーカーも起こしますが、その内部的な起床はエラーにはなりません。外部のキャンセルトークンや callback の例外は、クリーンアップの後に失敗として報告されます
バックプレッシャー
OutputQueueDepth は、callback でアクティブなビットマップを含む完成ビットマップの数を制限します。1 未満の値は実効ワーカー数を選択し、ページ数を超える値はクランプされます
スケジューラは次に必要な入力位置のために出力容量を予約するため、前のページのコンパイルが遅いときに、後のページがキューを埋めて順序付きの進行を妨げることはありません
PeakMemorySchedulerEnabled が有効な場合、要求された並列度は最大ページ推定量と現在利用可能なグローバルバジェットから引き下げられ、各ページの予約は作業の要求から借用ビットマップが callback を離れるまでアクティブのままです
メモリ予約は並列コンパイルとレンダリングの前に、入力順に要求されます。そのため後続のページが、次の callback に必要なバジェットを奪うことはありません
そのためキューイングされた出力は、アクティブなコンパイルや再生と同じプロセス全体のバジェットを公平に争い、キャンセルや失敗があればワーカーを合流させる前に未公開の予約を解放します
ワーカーが動作している間、callback からドキュメントを変更・破棄してはいけません
THPDFParallelRenderPipelineInfo · Display Lists and Print Production