微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 OnThreadCreate

如何解决从 OnThreadCreate

我对 CoCreateInstance 有一个问题,它在被调用后永远不会返回。它从 CSourceStream::OnThreadCreate

的重写方法调用

我认为问题在于我尝试在单独的线程中使用 COM,但我不确定。如何在另一个线程中使用 COM?这是调用堆栈以及我无论如何调用函数的方式。我检查了 CoInitialiseEx 返回 S_FALSE,所以 com 正在该线程上运行。

Call Stack

HRESULT hr = CoCreateInstance(CLSID_Filtergraph,NULL,CLSCTX_INPROC_SERVER,IID_PPV_ARGS(&pGraph));

我发现如果我在另一个在同一线程上运行的方法 (CSourceStream::FillBuffer) 中使用 CoCreateInstance,它可以工作,但我不知道为什么。

当 CoCreateInstance 挂起时,它卡在 WaitForMultipleObjectsEx 上,如下所示:

Call stack 2

解决方法

就像 Simon 在评论中所说,将 CLSID_FilterGraph 更改为 CLSID_FilterGraphNoThread 消除了僵局。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。