Multithreading 在Delphi线程中使用CoInitialize
我在Delphi程序的线程中使用TIdHttp和TXMLDocument。 现在我想知道:Multithreading 在Delphi线程中使用CoInitialize,multithreading,delphi,com,Multithreading,Delphi,Com,我在Delphi程序的线程中使用TIdHttp和TXMLDocument。 现在我想知道: 这些类是否使用COM对象,因此我需要在此线程中调用CoInitialize和ConInitialize 如果是,我必须在execute方法体中使用这些函数,还是在所有使用TIdHttp或TXMLDocument类的方法中使用这些函数 TIdHTTP没有COM依赖项 TXMLDocument可以依赖于COM。在Windows上,开箱即用,它是Microsoft的MSXML ActiveX组件的包装器,该组
没有COM依赖项TIdHTTP
- TXMLDocument可以依赖于COM。在Windows上,开箱即用,它是Microsoft的MSXML ActiveX组件的包装器,该组件使用COM。如果您使用另一个DOM供应商(例如,OmniXML,可从XE7获得),则不存在COM依赖关系。您可以通过设置全局变量来控制这一点
- 必须从线程上下文中调用一次
和CoInitialize
。通常在CoUninitialize
的TThread
方法中,如本示例流所示:Execute()
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;