Я хочу поддерживать рендеринг изображений SVG в виде растровых изображений, я использую librsvg. Пока работает хорошо и рисует с помощью Cairo, ура! Однако я столкнулся с проблемой:
У нас есть элемент управления, похожий на проводник Windows, например. он создает миниатюрные изображения файлов в каталоге, поэтому продукт будет расширен для создания миниатюр SVG.
Он использует фоновые потоки для создания миниатюрных изображений, поэтому пользовательский интерфейс не зависает во время работы. Код находится в разработке в течение длительного времени, поэтому проблем с параллелизмом не возникает. Но кажется, что когда rsvg_handle_new() вызывается из потока, отличного от основного потока, возникает нарушение прав доступа, когда это не так, у меня нет проблем с работой с librsvg.
Глядя на трассировку стека, кажется, что сбой происходит в libxml2 (который является зависимостью librsvg) в xmlSetGlobalState(), проблема кажется такой же, как описано здесь сбой libxml2 при втором использовании в Windows, который, похоже, не имеет решения. Я бы ограничил использование библиотеки основным потоком, только если бы мог, но я застрял в этой существующей архитектуре, которая создает эскизы вне основного потока.
Я нашел http://www.xmlsoft.org/threads.html, который предлагает вызвать xmlInitParser( ) в основном потоке сначала, который, кажется, вызывается librsvg во время создания RsvgHandle (я думаю).
Поэтому я не уверен, действительно ли это проблема с libxml2, проблема с тем, как librsvg использует libxml2, или проблема с тем, как я пытаюсь использовать librsvg?
Есть эксперты по libxml2 или librsvg?