【发布时间】:2012-08-16 11:49:07
【问题描述】:
我正在开发 Live DirectShow 过滤器。
我有一个 H264 流源,我可以通过 SDK API 获取流。
在我的过滤器中,我有一个队列,我将来自线程的传入流入队(推送)。 然后我在过滤器 FillBuffer 中消耗(出列,弹出)这些流...
所以我创建了一个线程安全的队列......但这会导致一些问题......
在 FillBuffer,如果我检查是否有任何传入数据包,如果有,则处理 逻辑是这样的:
...
bool hasElement = SynchronizedQueue.pop(element);
if(!hasElement)
{
return S_OK
}
...
...这会消耗大量 CPU...
如何使用 boost lib 实现带条件变量的锁
...
SynchronizedQueue.waitAndPop(element) ;// which wait until we have some
有情人CPU的...但是有时候Queue中没有数据的时候,这个block的FillBuffer函数和filter可能不会停止...
那么对于从远程机器获取输入流并将其传递给解码器的实时源过滤器的任何设计理念替代方案? 或者我怎样才能让我的设计更好....更低的 CPU 并且可以停止?
【问题讨论】: