У меня есть фильтр DirectShow, написанный на Delphi 6 с использованием библиотеки компонентов DSPACK.Это видео-фильтр push-источника, который получает свои исходные кадры от внешнего процесса взаимодействия, который я также написал.
Когда рабочий поток, который вызывает вызов FillBuffer () моего Filters, создается и запускается, когда начинается графиквверх, первое, что я делаю из этого рабочего потока, это создаю скрытое окно, используя AllocateHWND () для обработки сообщений WM_COPYDATA, которые содержат внешне сгенерированные кадры.Прямо перед тем, как нить уничтожена, я уничтожаю скрытое окно.Другими словами, скрытое окно создается и уничтожается в контексте выполнения рабочего потока, который вызывает FillBuffer ().Мое намерение состоит в том, чтобы позволить блоку FillBuffer () ожидать сообщения WM_COPYDATA или WM_QUIT.Внешний процесс взаимодействия отправит фреймы в мой фильтр, используя сообщение WM_COPYDATA и дескриптор WndProcc () моих скрытых окон.Я опубликую сообщение WM_QUIT в своем переопределении метода Inactive () для булавки (спасибо за этот совет @RomanR), чтобы разблокировать вызов FillBuffer () до выключения фильтра.
Мой вопрос:безопасно ли вызывать PeekMessage () или GetMessage () из вызова FillBuffer () с учетом этого сценария?Или есть потенциальные ловушки, которые могут возникнуть из-за этого в контексте выполнения графа DirectShow?Кроме того, видите ли вы какие-либо недостатки в моем общем подходе, которые я должен рассмотреть?