如果在异步方式下使用block函数,要首先创建一个win32事件,然后将这个事件句柄作为参数传递给block函数,这个函数会立即返回,然后调用waitforsingleobject方法等待事件被触发。如下:
// create an event
handle hevent = createevent(null, false, false, null);
if (hevent != null)
{
// block the data flow.
hr = pflowcontrol->block(am_pin_flow_control_block, hevent);
if (succeeded(hr))
{
// wait for the pin to finish.
dword dwres = waitforsingleobject(hevent, dwmilliseconds);
}
}
如何用同步的方式调用block函数,只需给它传递一个null的参数即可。这样这个函数就会一直阻塞下去,直到pin完全做好准备可以传递sample,阻塞停止。如果filter处于paused状态,阻塞时间也许会无限延长,因此,不要在你的主线程中采用同步的方式调用这个函数,可以新开一个线程或者采用异步的方式。
(2)重连pin a