THotPDF.RenderLoadedPagesParallelOrdered Method

Компилира и изобразява заредени страници едновременно, като доставя завършените bitmaps във входния ред чрез ограничен 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 се изпълнява серийно на извикващата нишка с позиция във входа, започваща от нулата, заявен индекс на страница, заета bitmap и флаг за отмяна

Bitmap-ът е валидна само по време на изпълнение на callback и се освобождава непосредствено след връщането му, затова я копирайте или кодирайте вътре в callback, когато резултатът трябва да надживее това извикване

Задайте Cancel, за да спрете заявяването на нови страници, да събудите блокираните workers, да изчакате текущата работа, да освободите непубликуваните резултати и да върнете броя завършени callbacks

Отмяната на callback събудява и workers, чакащи за резервация на памет, без това вътрешно събуждане да се превръща в грешка; външен cancellation token или изключение в callback пак докладва неуспех след почистването

Обратен натиск

OutputQueueDepth ограничава завършените bitmaps, включително bitmap-а, активен в callback; стойности под една избират действителния брой workers, а стойности над броя страници се ограничават до него

Scheduler-ът резервира изходен капацитет за следващата необходима входна позиция, така че по-късните страници не могат да запълнят опашката и да блокират подредения напредък, когато по-ранна страница се компилира по-бавно

С PeakMemorySchedulerEnabled заявената паралелност се намалява според оценката за най-голямата страница и наличния в момента глобален бюджет, а всяка резервация на страница остава активна от заявяването на работата до напускането на заетата ѝ bitmap от callback

Резервациите за памет се заявяват във входния ред преди паралелната компилация и рендиране, така че по-късните страници не могат да отмъкнат бюджета, нужен на следващия callback

Поставеният на опашка изход така се конкурира справедливо с активната компилация и възпроизвеждане за един и същ бюджет в целия процес, докато отмяната или неуспех освобождават непубликуваните резервации, преди да изчакат workers

Callback не трябва да променя или унищожава документа, докато workers са активни

THPDFParallelRenderPipelineInfo · Display списъци и печатно производство