SVG 画像のビットマップとしてのレンダリングをサポートしたいと考えています。librsvg を使用しています。これまでのところ、うまく機能し、Cairo を使用して描画します。万歳! しかし、私は問題に遭遇しました:
Windows Explorer に似たコントロールがあります。たとえば、ディレクトリ内のファイルのサムネイル サイズのイメージを作成するため、製品を拡張して SVG のサムネイルを生成できます。
バックグラウンド スレッドを使用してサムネイル画像を生成するため、動作中に UI がフリーズすることはありません。コードは長い間本番環境にあるため、同時実行の問題に関する限り問題はありません。しかし、メイン スレッド以外のスレッドから rsvg_handle_new() が呼び出されると、アクセス違反が発生するようです。
スタック トレースを見ると、クラッシュは libxml2 (librsvg の依存関係) で xmlSetGlobalState() で発生しているように見えます。問題はここで報告されているものと同じよう です。 . 可能であれば、ライブラリの使用をメイン スレッドに制限しますが、メイン スレッドからサムネイルを生成するこの既存のアーキテクチャにこだわっています。
RsvgHandleの作成中にlibrsvgによって呼び出されるように見える最初のメインスレッドでxmlInitParser()を呼び出すことを提案するhttp://www.xmlsoft.org/threads.htmlを見つけました(私は思います)。
それが本当に libxml2 の問題なのか、librsvg が libxml2 を使用する方法の問題なのか、それとも私が librsvg を使用しようとしている方法の問題なのか、私にはわかりません。
libxml2 または librsvg の専門家はいますか?