我有一个使用 DSPACK 组件库的 Delphi 6 DirectShow 推送源视频过滤器。过滤器的哪些方面需要我在执行某些操作之前锁定过滤器状态?例如,在我的过滤器的 FillBuffer() 方法中,我是否需要在编写位图画布之前锁定过滤器的共享状态?还是只有过滤引脚连接/断开事件或媒体格式协商等操作需要锁定共享状态?
问问题
226 次
1 回答
2
您锁定过滤器(它不是特定于过滤器的,它适用于多线程环境中的任何对象)以确保原子操作。它通常是数据访问或操作的序列化。
例如,CTransformFilter
类有两个关键部分:m_csFilter
和m_csReceive
.
m_csFilter
保护数据状态以确保当一个线程正在更改某些内容时,其他线程不会同时接触相同的数据。另一个m_csReceive
用于序列化接收和流结束事件。
当您需要您的操作不会被并发线程上的操作中断时,您需要锁定过滤器状态。因为您的锁可能会延迟其他线程,所以您应该在最短的时间内保持锁以尽可能少地影响其他线程的执行。
于 2011-12-24T18:38:31.830 回答