Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje informace o správě odkazů na vlákna pomocí funkcí odlehčeného nástroje Shell.
Situace vznikají, když nadřazené vlákno musí být aktivní po dobu životnosti podřízeného vlákna. Pokud je například objekt modelu COM (Component Object Model) vytvořen v nadřazené vlákně a zařazen do podřízeného vlákna, nadřazené vlákno nemůže před podřízeným vláknem ukončit. K tomuto účelu poskytuje prostředí Shell tyto funkce.
Tyto funkce použijte ve svém nadřazeném vlákně, jak je uvedeno zde.
Deklarujte proceduru vlákna definovanou aplikací odpovídající formě funkce ThreadProc.
DWORD WINAPI ThreadProc(LPVOID lpParameter);Ve ThreadProczavolejte SHCreateThreadRef pro vytvoření odkazu na vlákno. Tím to poskytuje ukazatel na instanci IUnknown. Tato IUnknown používá hodnotu, na kterou odkazuje pcRef, aby se zachoval počet odkazů. Dokud je tento počet větší než 0, zůstane vlákno aktivní.
Pomocí tohoto ukazatele na IUnknownvolejte SHSetThreadRef ve vašem ThreadProc. Tím se nastaví odkaz, aby následná volání SHGetThreadRef měla co načítat.
Pokud ThreadProc vytvoří další vlákno, může vlákna ThreadProc volat SHGetThreadRef ukazatelem na IUnknown získané SHCreateThreadRef. Tím se zvýší počet odkazů, na který odkazuje parametr pcRef v SHCreateThreadRef.
Vytvořte vlákno. To se obvykle provádí voláním SHCreateThread, předáním ukazatele na váš ThreadProc v parametru pfnThreadProc. Také předejte příznak CTF_THREAD_REF v parametru dwFlags. Vlákno je aktivní, dokud se provádí ThreadProc.
Při vytvoření podřízeného vlákna předejte příznak CTF_REF_COUNTED v parametru dwFlags ve volání SHCreateThread.
Jakmile se podřízená vlákna dokončí a uvolní se, hodnota nadřazeného vlákna pcRef, na kterou odkazují, se sníží. Jakmile jsou všechna podřízená vlákna dokončena, může původní ThreadProc dokončit svou činnost a uvolnit konečný odkaz na vlákno, čímž se počet odkazů vrátí na 0. V tomto okamžiku se uvolní odkaz na původní vlákno otevřené SHCreateThread a vlákno je dokončeno.
Další související funkce je SHReleaseThreadRef. Tato funkce je volána ThreadProc pokud vlákno bylo vytvořeno pomocí SHCreateThread s příznakem CTF_THREAD_REF. ThreadProc však není požadováno, aby tak činil implicitně. Pro zavolání IUnknown::Release na ukazatel k IUnknown, získaný prostřednictvím SHCreateThreadRef, je toto vše, co je potřeba udělat.