THotPDF.RenderLoadedPagesParallelOrdered Method
同時編譯並轉譯已載入頁面,透過呼叫執行緒上有上限的回呼按輸入順序遞送完成的點陣圖
宣告
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 在呼叫執行緒上序列執行,收到以零為起始的輸入位置、請求的頁面索引、借用的點陣圖與取消旗標
點陣圖只在回呼執行期間有效,回呼傳回後立即釋放;若結果必須活得比該次呼叫久,請在回呼內複製或編碼
設定 Cancel 可停止認領新頁面、喚醒受阻的工作者、等進行中的工作收尾、釋放尚未發布的結果,並傳回已完成的回呼數量
回呼取消也會喚醒正在等待記憶體保留的工作者,但不把那次內部喚醒當成錯誤;外部取消權杖或回呼例外仍會在清理後回報失敗
背壓
OutputQueueDepth 限制已完成點陣圖的數量,包括回呼中正在使用的哪一個;小於 1 的值會改用實際工作者數量,超過頁面數的值會被夾限
排程器會為下一個需要的輸入位置保留輸出容量,因此當較早的頁面編譯得慢時,較晚的頁面無法塞滿佇列、擋住有序推進
啟用 PeakMemorySchedulerEnabled 時,會依最大的頁面估算值與目前可用的全域預算調降請求的平行度;每個頁面的保留額度從工作被認領起持續生效,直到其借用的點陣圖離開回呼
記憶體保留會在平行編譯與轉譯之前按輸入順序提出,較晚的頁面因此搶不走下一個回呼需要的預算
因此排入佇列的輸出會與進行中的編譯和播放公平競爭同一份行程層級預算;取消或失敗時,會先釋放尚未發布的保留額度,再等工作者收尾
工作者運作期間,回呼不得變更或摧毀文件