gpt4 book ai didi

multithreading - MSAA 不在主线程中产生新的行为

转载 作者:行者123 更新时间:2023-12-03 13:00:07 25 4
gpt4 key购买 nike

我对 Qt 中的 Microsoft Active Accessibility 和线程有疑问。例如下面的代码:

CComPtr<IAccessible> _pAccMain;
HWND _hWnd = ...; // Handle of some window
HRESULT hr0 = ::AccessibleObjectFromWindow(_hWnd,
OBJID_CLIENT,
IID_IAccessible,
(void**)(&_pAccMain));
long childCount = 0;

HRESULT hr1 = _pAccMain->get_accChildCount(&childCount);

它工作正常,在主线程中,这些函数为 hr0 和 hr1 返回成功,我得到了 _pAccMain 和 childCount 的正确成功数据。但是当我创建一个新线程并尝试使用该新线程中的代码时,hr0 和 hr1 再次成功,但在 _pAccMain 和 childCount 中得到了不同的数据。 IE。相同的代码在不同的线程中有不止一种行为。

为什么在该示例中另一个线程有另一种行为?

我该如何解决它的行为?

我可以修复它吗?

最佳答案

  • 没有 promise AccessibleObjectFromWindow调用返回相同的接口(interface)指针,所以 _pAccMain值不必与指针相等
  • 此外,从不同的线程(单元)调用可能会涉及到编码,在这种情况下,您可能会得到一个代理接口(interface),而不是真实的对象接口(interface);这些是不同的指针
  • 是设计行为
  • 通过提及不同的childCount你应该提到如果工作线程让你为零,或者在子枚举中到底有什么不同
  • COM中的线程之间没有免费的COM指针传递,你的问题表明你在做什么;您只能使用 MTA 线程执行此操作,否则您必须编码/解码指针以在另一个线程中获取有效指针
  • 关于multithreading - MSAA 不在主线程中产生新的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29573060/

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