gpt4 book ai didi

multithreading - 在 Delphi 线程中使用 CoInitialize

转载 作者:行者123 更新时间:2023-12-03 18:18:03 29 4
gpt4 key购买 nike

我在 Delphi 程序的线程内使用 TIdHttp 和 TXMLDocument。现在我想知道:

  1. 这些类是否使用 COM 对象,因此我需要在此线程中调用 CoInitialize 和 CoUninitialize?
  2. 如果是,我是否必须在执行方法主体或所有使用 TIdHttp 或 TXMLDocument 类的方法中使用这些函数?

最佳答案

  • TIdHTTP 没有 COM 依赖。

  • TXMLDocument 可以依赖于 COM。在 Windows 上,开箱即用,它是 Microsoft 的 MSXML ActiveX 组件的包装器,该组件使用 COM。如果您使用另一个 DOM 供应商(例如,OmniXML,可从 XE7 获得),则没有 COM 依赖性。您可以通过设置 DefaultDOMVendor 来控制它全局变量。

  • CoInitializeCoUninitialize 必须在线程上下文中调用一次。通常在 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;

关于multithreading - 在 Delphi 线程中使用 CoInitialize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42904464/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com