directshow cbaserender线程安全吗?
Is directshow CBaseRenderer thread safe?
我正在使用一个简单的directshow过滤器,该过滤器派生自directshow基类中的CBaseRenderer
,并且我在这个类中得到死锁。
我有一个很好的谷歌,并发现有人有完全相同的问题(在停止中的InterfaceLock
和Receive
中的RendererLock
之间出现死锁),但他没有得到任何响应,这表明这是一个罕见的情况,他和我已经在我们的代码中(而不是在ms基类中的错误)。
那么,其他人看到这个问题了吗?我应该从CBaseRenderer
导出我的过滤器(它不做那么多TBH)还是直接到CBaseFilter/CBaseInputPin
类?如果我要重写WaitForReceiveToComplete
,我应该在里面放什么?
我将回到基础并查看转储示例过滤器,但我仍然对有使用CBaseRenderer
经验的人的反应感兴趣。
我想问题可能是围绕这个循环在baseclass renbase.cpp:
void CBaseRenderer::WaitForReceiveToComplete()
{
// NOTE: m_InterfaceLock is locked higher on the call stack
for (;;) {
if (!m_bInReceive) {
break;
}
MSG msg;
// Receive all interthread snedmessages
PeekMessage(&msg, NULL, WM_NULL, WM_NULL, PM_NOREMOVE);
// TODO: Unlock m_InterfaceLock until the end of the loop
Sleep(1);
}
上面的注释解释了这个问题——一个无限循环可能会占用一个试图进入m_InterfaceLock
的并发线程。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 如何将元素添加到数组的线程安全函数?
- C++中的线程安全删除
- 在std::thread中,joinable()然后join()线程安全吗
- 在c++队列中使用pop和visit实现线程安全
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 全局变量 多读取器 一个写入器多线程安全?
- 共享队列的线程安全
- boost::文件系统::recursive_directory_iterator多线程安全
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 以线程安全的方式转换 C/C++ 中时区名称字符串的时区偏移量
- 线程安全运算符<<
- 如何使缓存线程安全
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 提升精神 V2 Qi 语法线程安全吗?
- 线程调用的函数对对象删除是否安全?
- asio 链对象线程安全吗?
- 线程安全队列 c++
- 提供对不同类型的数据(建议、代码审查)的线程安全访问的类
- 有没有更好的方法可以使此代码线程安全?线程局部静态似乎是一个生硬的工具