我们在使用DirectShow开发SourceFilter(推模式)的过程中,可能会遇到一个奇怪的问题:在点击GraphEdit的Stop时,整个graphedit就会没有响应,10秒之后,timeout了,会弹出个对话框,说无法停止。
解决这个问题的最简单的方法,就是在filter的pause中当m_State == State_Running的时候,调用下一个filter的IPin::EndOfStream或DeliverEndOfStream,这不是正解!但对某些情形也有其适用范围。
问题原因:没有处理好发送线程与FilterGraph状态转换之间的关系。
真正的解决方法:在IPin的Active与Inactive方法中启动或关闭数据发送线程。