Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het kiezen van het threadingmodel voor een object is afhankelijk van de functie van het object. Een object dat uitgebreide I/O verricht, kan ondersteuning bieden voor vrij threading om maximaal te reageren op klanten door interface-aanroepen toe te staan tijdens I/O-wachttijd. Aan de andere kant kan een object dat met de gebruiker communiceert, het zogenaamde 'apartment threading' ondersteunen om binnenkomende COM-oproepen te synchroniseren met zijn vensterbewerkingen.
Het is eenvoudiger om appartementthreading in appartementen met één thread te ondersteunen, omdat COM synchronisatie per oproep biedt. Het ondersteunen van vrije threading is moeilijker omdat het object synchronisatie moet implementeren; reactie op de clients kan echter beter zijn omdat synchronisatie kan worden geïmplementeerd voor kleinere secties van de code.
Tip
Snelle beslissingshandleiding voor COM-clients:
// UI thread or main thread with a message loop → STA
HRESULT hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
// Background/worker thread with no message loop → MTA
HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
Stel voor COM-servers (in-process DLL's) de ThreadingModel registerwaarde in onder de InprocServer32 sleutel:
-
Apartment— Object wordt uitgevoerd in de STA van de aanroeper (het meest gebruikelijk voor UI-gerelateerde objecten) -
Free— Object wordt uitgevoerd in de MTA -
Both— Object wordt uitgevoerd in het appartement van de beller (het beste voor objecten voor algemeen gebruik) -
Neutral— Object wordt uitgevoerd in het Neutral Apartment (alleen COM+)
Als u het niet zeker weet, begint u met Both en zorgt u ervoor dat uw object thread-veilig is. Dit vermindert het marshaling van meerdere appartementen door COM het object in het appartement van de beller te laten maken, hoewel marshaling nog steeds kan optreden voor callbacks tussen appartementen of toegang vanuit andere appartementen.
Verwante onderwerpen