Нерешенные проблемы с C++ EDITTEXT и DIRECTSHOW PAUSE()

У меня есть простая winform, которая пишет в EDITTEXT, так как программа продолжает процесс печати, выполняющийся идеально. но как только я нажимаю кнопку STOP, которая сначала вызывает функцию PAUSE(), моя программа застревает внутри

SetWindowText(m_hWatermarksEditBox, &m_watermarkLog[0]);

все значения инициализируются и в них попадают правильные данные.

я думаю, что я должен объявить РАБОТНИК МЕТОДА, как в C#.NET, но я не знаю как.

STDMETHODIMP CNaveFilter::Pause()
        {
            ATLTRACE(L"(%0.5d)CNaveFilter::Pause() (this:0x%.8x)\r\n", GetCurrentThreadId(), (DWORD)this);
            HRESULT hr = S_OK;
            CAutoLock __lock(&m_cs);
            hr = CBaseFilter::Pause();
            return hr;
        }

        STDMETHODIMP CNaveFilter::Stop()
        {
            ATLTRACE(L"(%0.5d)CNaveFilter::Stop() (this:0x%.8x)\r\n", GetCurrentThreadId(), (DWORD)this);
            HRESULT hr = S_OK;
            CAutoLock __lock(&m_cs);

            hr = CBaseFilter::Stop();
            ATLASSERT(SUCCEEDED(hr));
            return hr;
        }

1 ответ

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

SetWindowText безопасно вызывать только из вашего потока пользовательского интерфейса (ну, технически не только он, но определенно не потоковый поток). Поэтому, если вы хотите обновить контрольный текст или отправить ему какое-либо сообщение, вы должны сделать это по-другому, чтобы ваш поток вызывающих мог продолжить работу.

Как правило, вы должны хранить некоторую релевантную информацию в переменной-члене (не забывайте блокировать критическую секцию) тогда PostMessage, получите сообщение в вашем окне / элементе управления и обработайте его там в нужной ветке, позвонив SetWindowText там.

См. Управление кадром / скоростью и временем экспозиции через sampleCB. Он охватывает немного другую тему, но полезен с точки зрения отправки / публикации сообщений в фильтре DirectShow.

Другие вопросы по тегам