English | 日本
C++ PDF
Shopping CartContact Us PDF C#
Knowledgebase
BCL easy PDF SDK

どのようにeasyPDF SDKを用いてマルチ-スレッドPDFアプリケーションを構築するのでしょうか?

最終更新日:2014年8月25日

  • PDF SDKベースのマルチ-アプリケーション

    easyPDF SDKでマルチ-スレッドのPDFアプリケーションを構築することは、実際、比較的簡単です。 弊社のPDF SDKはこのアプリケーションを直接ハンドルするのではなく、ご自身のアプリケーションが、PDF SDKのマルチ-スレッディングを担う必要があります。それら自身の独特なスレッドの内部で、PDF SDKオブジェクトを作成し、必要としているプロセスのオペレーションを処理し、そしてその後、一旦処理の終了したオブジェクトをリリースする必要があります。 オブジェクトが各固有のスレッド内に残っているかぎり、お互いを妨害することなしに動作します。PrintJob.PrintOut()メソッドは全てスレッド・セーフです。


    しかし、PDF SDKのある特定な面では、スレッド・セーフではありません。 特に、例えばPrinterSetting.Save()のように、.Save()メソッドをコールすることは、スレッド・セーフではありません。 これは、PDF SDKのドキュメントを作成するために仮想プリンタを使用する際の不遇な制限です。 プリンタは、用紙サイズまたは用紙の向きたった一つの設定しか有効にできません。なぜなら、プリンタは、物理的な制限によって、一度に一つのPDFドキュメントだけを実際にプリントできるからです。 弊社のPDF SDKのプリンタは物理的な制限を持っていません。しかし、Windowsの中に構築されたプリンタ・フレームワークは、物理的制限を持ち、それに応じて処理を行うと仮定しています。


    もし、PrinterSetting.Save() メソッドをコールすれば、ユーザーアカウントのプリンタの設定に上書きします。 そのように、これらの設定が進行中の変換の間で変更されれば、問題を引き起こすことがあり得ます。 ベストなケース・シナリオでは、二つの異なるページ間のフォーマットは、別々のものになります。最悪のケース・シナリオでは、変換過程全てを損なうメモリ・アクセス違反を起こしてしまいます。


    デスクトップ・マシン上でプリントを行う場合、一度に一つの変換を実行すれば、これは問題でなくなります。 個々の変換に合わせるために設定を変更することが可能です。 たとえ、ターミナル・サーバ環境のような、複数のユーザーが存在しても、デスクトップアプリケーションを実行しているユーザーとして各々がログオンされている限り、彼らは皆、自分たちの望むように設定を変更することができます。 しかし、ローダーを用いたサーバ環境において、これは動作しません。なぜならローダーは特定のユーザーアカウントを介して実行されなくてはならないからです。そしてこのようにPrinterSettingsへのいかなる変更も、その時の単一のユーザーアカウントにおいて発生します。


    そのように、サーバからプリントをしたい場合、最適な設定を決定し、それらを適切なオブジェクトのための.Save() メソッドを用いて適用させなければなりません。その時点で、それらの設定が、マシン上の引き続き発生するジョブ全てに対してデフォルトになります。 もし設定変更を可能にすることが必要であれば、ベストな解決方法は、複数の並行したサーバがそれら自身の設定を各々持って動作し、そしてジョブを適切に分類することです。


  • マルチ-スレッド・アプリケーションをベースにしたPDF SDK COMオブジェクト

    BCLのPDF SDK COMオブジェクトはマルチ-スレッドアパートメント(MTA)で動作することができません。 COMオブジェクトは、シングル-スレッドアパートメント(STA)で実行されなくてはなりません。 スレッドのための.NET Framework 4のデフォルト設定はMTAです。 弊社PDF COMオブジェクトのいずれもマルチ-スレッドアパートメント下で動作しません。ですから、STA内でスレッドをマニュアルで設定しなくてはなりません。 もしCOMオブジェクトはMTAであれば、複数のスレッドがお互いに作用しあうことが可能だという意味です。 弊社PDF COMオブジェクトはSTAで、完全にシングル-スレッドです。 並行して弊社PDF COMオブジェクトの複数のインターフェースを動かすことは可能ですが、複数のスレッドは同じPDF COMオブジェクトをシェアすることができません。 各PDF COMオブジェクトは、シングル-スレッドアパートメントで隔離されていなくてはなりません。


    このアパートメントの概念(MTA vs. STA)は、COMオブジェクトの一面です。 .NET下で新しいスレッドを作成する際、STAまたはMTAのいずれかを選択する必要があります。 PDF COMオブジェクトを使用する場合、これは唯一重要なことです。 MTAスレッドは、複数のスレッド間の同じCOMオブジェクトをシェアすることを可能にします。 それが、基本的にSTAと異なります。MTAとSTAは全体的に異なります。 easyConverterとeasyPDFは全てSTAなので、スレッドはSTAでなくてはなりません。


    これは、easyPDFでマルチスレッドを動作させることができないというわけではありません。 マルチスレッドを動作させることは可能ですが、STAアパートメントにおいてのみです。 これは、「シングル-スレッドアパートメント」と呼ばれているので、大きく直観に反しています。しかし、1つ(シングル)のスレッドに制限されることを実際には意味していません。 しかし、STA COMオブジェクトをMTA内のeasyPDFのように動かそうとするならば、ファンクションコールを順番に並べます。 複数のスレッドでは動作しません。 もしSTAスレッドが動作すれば、ひとつのSTA COMオブジェクトだけ複数のスレッドで動作します。.


    ですから、MTAとSTA COMオブジェクト両方ともマルチ-スレッディングが可能ですが、それらは全く異なる動作をします。 肝心な点は、STAアパートメントからeasyPDFを動作させなければならないということです。 そして、カスタマーは一行のコードでこれを修正できます。


-
 
BCL
© 1993 - , BCL Technologies.
弊社以外の全ての商標は、各所有者に帰属します。