2017-03-20 49 views
1

私はTIdHttpとTXMLDocumentをDelphiプログラムのスレッド内で使用しています。DelphiスレッドでCoInitializeを使用する

  1. は、これらのクラスは、COMは、私はこのスレッドでのCoInitializeとCoUninitializeのを呼び出す必要があるので、オブジェクトを使用していますか: は今、私が知りたいですか?
  2. 「はい」の場合は、実行メソッドの本体またはTIdHttpクラスまたはTXMLDocumentクラスを使用するすべてのメソッドでこれらの関数を使用する必要がありますか?

答えて

4
  • TIdHTTPにはCOMの依存関係を持っていません。

  • TXMLDocument はCOMに依存します。 Windowsでは、すぐに使用できるのは、COMを使用するMicrosoftのMSXML ActiveXコンポーネントのラッパーです。別のDOMベンダー(XE7から入手可能なOmniXMLなど)を使用する場合、COMの依存関係はありません。これを制御するには、グローバル変数DefaultDOMVendorを設定します。

  • CoInitializeおよびCoUninitializeは、スレッドコンテキスト内から1回呼び出す必要があります。一般的に、この例の流れに見られるようTThreadExecute()方法、で:

    procedure TMyThread.Execute; 
    begin 
        try 
        CoInitialize(nil); 
        try 
         while not Terminated do 
         begin 
         DoWorkThatMayUseCOM; 
         end; 
        finally 
         CoUninitialize(); 
        end; 
        except 
        on E: Exception do 
         // log exception 
         Log(E); 
        end; 
    end; 
    
+0

whosrdaddyありがとうございます。 あなたの答えは非常に便利でした。 –

+0

と別の質問: 不要なCoInitializeコールを使用すると、パフォーマンスに問題はありますか? –

+0

@AmirZojaji:実際には、アプリケーションライフタイムでスレッドごとに1回しか呼び出されません。 – whosrdaddy

関連する問題