Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Direct3D-applikationer i helskärmsläge ger ett fönsterhandtag till Direct3D-körtiden. Fönstret är kopplat till körningstiden. Det innebär att alla meddelanden som skickas till programmets fönstermeddelandeprocedur först har granskats av Direct3D-körningstidens egen meddelandehanteringsprocedur.
Ändringar i visningsläget påverkas av stödrutiner som är inbyggda i det underliggande operativsystemet. När lägesändringar sker sänder systemet flera meddelanden till alla program. I Direct3D-program tas meddelandena emot i fönsterprocedurtråden, vilket inte nödvändigtvis är samma tråd som heter IDirect3DDevice9::Reset or IDirect3D9::CreateDevice (eller den slutliga versionen av IDirect3DDevice9, vilket kan orsaka en ändring av visningsläget). Direct3D-körtiden hanterar flera kritiska avsnitt internt. Eftersom minst ett av dessa kritiska avsnitt bibehålls under lägesväxlingen som orsakas av IDirect3DDevice9:: Reset eller IDirect3D9::CreateDevice, är dessa kritiska avsnitt fortfarande aktiva när programmet tar emot fönstermeddelanden relaterade till lägesändringen.
Den här designen har vissa konsekvenser för flertrådade program. I synnerhet måste ett program se till att starkt separera sina fönstermeddelandehanteringstrådar från sina Direct3D-trådar. Ett program som orsakar en lägesändring på en tråd men gör Direct3D-anrop på en annan tråd i fönsterproceduren riskerar att bli låst.
Av dessa skäl Direct3D är utformat så att metoderna IDirect3DDevice9::Reset, IDirect3D9::CreateDevice, IDirect3DDevice9::TestCooperativeLeveleller den slutliga versionen av IDirect3DDevice9 kan bara anropas från samma tråd som hanterar fönstermeddelanden.
Relaterade ämnen