c # — Создать граф DirectShow в потоке

У меня есть график, который занимает много времени, чтобы создать и подготовиться (5-10 секунд). Чтобы избежать замораживания, я решил создать свой график в потоке, но происходит нечто странное. После того, как я запустил свой график во время отладки; когда я в теме, я вижу видео в своем окне. Но когда поток заканчивается, видео исчезает. Я определил все глобально о моем графике. Что не так с созданием графика в отдельном потоке?

Спасибо

2

Решение

Можно создать график в стороннем потоке, и это работоспособный сценарий. Однако одной этой информации недостаточно, чтобы достоверно объяснить симптомы. Поскольку у вас есть видео, якобы у вас есть фильтр видео рендерера, особенно. работает в оконном режиме. Если он создает окно в этом фоновом потоке, то окно ожидает, что поток будет живым, и даже больше, ожидается, что вы доставите оконные сообщения в этом потоке. Это означает, что вы не можете выйти, как только запустите график.

Из-за окон, в том числе, возможно, внутренних, которые фильтры могут создавать для своих собственных нужд, безопаснее создавать графики фильтров в потоках STA. Это может быть побочный поток STA, на котором вы создаете граф, вы поддерживаете его до тех пор, пока не уничтожите граф, а пока не запустите цикл обработки сообщений. Обратите внимание, что существует версия диспетчера графиков Fitler, подходящая для этого сценария:

CLSID_FilterGraphNoThread создает Диспетчер графиков фильтров в потоке приложения. Если вы используете этот CLSID, поток, который вызывает CoCreateInstance, должен иметь цикл сообщений, который отправляет сообщения; в противном случае могут возникнуть тупики. Кроме того, перед выходом из потока приложения он должен освободить диспетчер графов фильтров и все графические объекты (такие как фильтры, выводы, опорные часы и т. Д.).

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector