Durdurma
[DirectShow bu sayfayla ilişkilendirilmiş özellik eski bir özelliktir. Yerine MediaPlayer, IMFMediaEngineve Media Foundation 'de Ses/Video Yakalamaalmıştır. Bu özellikler Windows 10 ve Windows 11 için iyileştirilmiştir. Microsoft, mümkün olduğunda, yeni kodun DirectShowyerine MediaPlayer, IMFMediaEngine ve Audio/Video Capture in Media Foundation kullanılması gerektiğini şiddetle tavsiye eder. Microsoft, mümkünse yeni API'leri kullanmak için eski API'leri kullanan mevcut kodun yeniden yazılmasını önerir.]
Stop yönteminin Receive yönteminin engelini kaldırması ve filtrenin ayırıcılarını kaldırması gerekir. Bir ayırıcıdan hafızayı serbest bırakmak, beklemede olan tüm GetBuffer çağrılarını geri döndürmeye zorlar ve bu da örnekleri bekleyen yukarı akış filtrelerinin kilidini açar. Stop yöntemi filtre kilidini tutar ve ardından CBaseFilter::Stop yöntemini çağırır ve bu yöntem CBasePin::Inactive filtrenin tüm pinlerinde çağırır:
HRESULT CMyFilter::Stop()
{
CAutoLock lock_it(m_pLock);
// Inactivate all the pins, to protect the filter resources.
hr = CBaseFilter::Stop();
/* Safe to destroy filter resources used by the streaming thread. */
return hr;
}
Giriş pininin Etkin Olmayan yöntemini aşağıdaki gibi geçersiz kılın:
HRESULT CMyInputPin::Inactive()
{
// You do not need to hold the filter lock here.
// It is already locked in Stop.
// Unblock Receive.
SetEvent(m_hSomeEventThatReceiveNeedsToWaitOn);
// Make sure Receive will fail.
// This also decommits the allocator.
HRESULT hr = CBaseInputPin::Inactive();
// Make sure Receive has completed, and is not using resources.
{
CAutoLock c(&m_csReceive);
/* It is now safe to destroy filter resources used by the
streaming thread. */
}
return hr;
}