Когда мне нужно беспокоиться о блокировке общего состояния фильтра DirectShow? - PullRequest
0 голосов
/ 24 декабря 2011

У меня есть видео-фильтр Delphi 6 DirectShow, использующий библиотеку компонентов DSPACK. Какие аспекты фильтра требуют от меня блокировки состояния фильтра перед выполнением определенных операций? Например, в методе моего фильтра FillBuffer () мне нужно заблокировать общее состояние фильтра перед записью растрового холста? Или это только такие операции, как события подключения / отключения фильтра или согласования формата мультимедиа и т. Д., Которые требуют блокирования общего состояния?

1 Ответ

2 голосов
/ 24 декабря 2011

Вы блокируете фильтр (он не является специфичным для фильтра, он применяется к любому объекту в многопоточной среде), чтобы обеспечить атомарную работу. Обычно это доступ к данным или сериализация действий.

Например, класс CTransformFilter имеет две критические секции: m_csFilter и m_csReceive.

m_csFilter защищает состояние данных, чтобы гарантировать, что пока один поток что-то меняет, другие потоки не касаются одних и тех же данных одновременно. Другой, m_csReceive используется для сериализации событий приема и окончания потока.

Вам нужно заблокировать состояние фильтра, когда вам нужно, чтобы ваши операции не прерывались действием в параллельном потоке. Поскольку ваша блокировка может задержать другие потоки, ожидается, что вы будете удерживать блокировку минимальное время, чтобы как можно меньше влиять на выполнение в других потоках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...