我什么时候需要担心锁定DirectShow过滤器的共享状态?

时间:2011-12-24 06:36:21

标签: delphi filter locking directshow dspack

我有一个使用DSPACK组件库的Delphi 6 DirectShow推送源视频过滤器。过滤器的哪些方面要求我在执行某些操作之前锁定过滤器状态?例如,在我的过滤器的FillBuffer()方法中,我是否需要在编写位图画布之前锁定过滤器的共享状态?或者只是需要锁定共享状态的过滤引脚连接/断开事件或媒体格式协商等操作?

1 个答案:

答案 0 :(得分:2)

锁定过滤器(它不是特定于过滤器的,它适用于多线程环境中的任何对象)以确保原子操作。它通常是数据访问或动作序列化。

例如,CTransformFilter类有两个关键部分:m_csFilterm_csReceive

m_csFilter保护数据状态以确保在一个线程正在更改某些内容时,其他线程不会同时触摸相同的数据。另一个m_csReceive用于序列化接收和流结束事件。

当您需要操作不会被并发线程上的操作中断时,您需要锁定过滤器状态。因为你的锁可能会延迟其他线程,所以你需要保持锁的最小时间,以尽可能少地执行其他线程。