Должен ли я заблокировать состояние фильтра во время вызова FillBuffer () исходного фильтра принудительной отправки DirectShow? - PullRequest
1 голос
/ 21 ноября 2011

У меня есть фильтр DirectShow, написанный на Delphi 6 с использованием библиотеки компонентов DSPACK. В настоящее время я блокирую состояние фильтра, используя объект sync obj, созданный для этой цели в начале вызова FillBuffer (), и освобождаю его в конце (внутри секции finally конструкции try / finally). Поскольку вызов FillBuffer () может блокироваться при ожидании отправки новых данных, через вызов WaitForSingleObject (), который выпускается потоком, выполняющим задачу генерации данных, это плохая идея? Я обеспокоен тем, что, если FillBuffer () вызывает блокировку в течение (относительно) длительного времени, это может отрицательно повлиять на мой фильтр или весь график фильтра.

1 Ответ

1 голос
/ 21 ноября 2011

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

...