ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°Π³ΡΠ΅Π³ΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π΅ ΡΡΠ΅Π±ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΡΠΎΠΌΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² C++, ΡΠΎ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π°Ρ ΡΠΎΡΠΌΠ° ΠΌΠ°ΠΊΡΠΎΡΠ° IMPLEMENT_UNKNOWN ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π΄Π²ΠΎΠ΅Π½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ IUnknown. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°:
class Car : public ICar
{
Car(void);
IMPLEMENT_UNKNOWN(Car)
BEGIN_INTERFACE_TABLE(Car)
IMPLEMENTS_INTERFACE(ICar)
IMPLEMENTS_INTERFACE(IVehicle)
END_INTERFACE()
// IVehicle methods
// ΠΌΠ΅ΡΠΎΠ΄Ρ IVehicle
STDMETHODIMP GetMaxSpeed(long *pn);
// ICar methods
// ΠΌΠ΅ΡΠΎΠ΄Ρ ICar
STDMETHODIMP Brake(void);
};
ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
class Car : public ICar
{
Car(void);
//indicate that aggregation is required
// ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
IMPLEMENT_AGGREGATABLE_UNKNOWN(Car)
BEGIN_INTERFACE_TABLE(Car)
IMPLEMENTS_INTERFACE(ICar)
IMPLEMENTS_INTERFACE(IVehicle)
END_INTERFACE()
// IVehicle methods
// ΠΌΠ΅ΡΠΎΠ΄Ρ IVehicle
STDMETHODIMP GetMaxSpeed(long *pn);
// ICar methods
// ΠΌΠ΅ΡΠΎΠ΄Ρ ICar
STDMETHODIMP Brake(void);
};
ΠΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ° IMPLEMENT_AGGREGATABLE_UNKNOWN Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π² ΠΊΠΎΠ΄, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΠΊ ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅.
ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ΅ Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΡΠΏΠΎΡΠΎΠ±Π½Ρ ΠΊ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π²ΡΡΡΠ°Π²ΠΈΡΡ Π½Π΅Π°Π³ΡΠ΅Π³ΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΠΎΠ±Ρ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ²Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π»ΠΈ Π²ΡΠ·ΠΎΠ²Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ. ΠΡΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Π‘ΠΠ ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ (containment).
ΠΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 4.9, Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΈΡ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ. ΠΡΠΈ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π‘ΠΠ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΡΠΎΠ±ΡΡ Π·Π°Π±ΠΎΡ ΠΊΠ°ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ°Π²ΠΈΠ» ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π‘ΠΠ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π²ΠΏΡΡΠΌΡΡ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π΅ Π²Π½Π΅Π΄ΡΡΠ΅ΡΡΡ Π² ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΡΠΈΠΏΠΎΠ² Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π₯ΠΎΡΡ Π‘ΠΠ-Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ Π‘ΠΠ, ΠΎΠ½ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΡΠΎΠ±ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡΠΊΠΈΡ ΡΡ ΠΈΡΡΠ΅Π½ΠΈΠΉ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ, ΡΡΠΎ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅Π°Π΄ΡΠ΅ΡΠΎΠ²ΡΠ²Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΎΡ Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
ΠΠ΄Π΅ ΠΌΡ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌΡΡ?
Π Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΠΈΡΡ Π·Π°ΠΊΠΎΠ½Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π² Π‘ΠΠ. Π ΡΡΠΈΡ Π·Π°ΠΊΠΎΠ½Π°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π±ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π‘ΠΠ. ΠΠ°ΠΊΠΎΠ½Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π‘ΠΠ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΡΡΡΡΠ°ΡΡΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΏΡΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π΄Π»Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΡΡΡΠ»ΠΎΠΊ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π±ΡΠ»Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ. ΠΠ»Ρ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ vptr, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π±ΡΠ»ΠΈ ΠΎΠΏΠΈΡΠ°Π½Ρ ΠΎΡΠ΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ. ΠΠ°ΡΠ΅ΠΌ Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΡ (identity ) ΠΈΠ· Π΄Π²ΡΡ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΠΎΠΈΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΡΡΠΈΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π²ΡΡΡΡΠΏΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΡ Π‘ΠΠ. ΠΠ°ΠΆΠ΄Π°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°, ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ ΠΈΠ»ΠΈ Π²ΡΠ΅Ρ Π²ΠΌΠ΅ΡΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΊΡΡΡΠΎ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠ»Π°Π²Π° 5. ΠΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΡ
STDMETHODIMP CMyClass::MethodX(void) {
EnterCr1t1calSect1on(&m_cs);
if (TryToPerformX() == false)
return E_UNEXPECTED:
LeaveCriticalSect1on(&m_cs);
return S_OK; }
ΠΠ½ΠΎΠ½ΠΈΠΌ, 1996Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΠΈΡΡ ΠΎΡΠ½ΠΎΠ²Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π² Π‘ΠΠ ΠΈ Π±ΡΠ»ΠΎ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π‘ΠΠ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. ΠΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° IUnknown ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» Π΄Π»Ρ ΠΏΡΠΈΠ΄Π°Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ. Π Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΡΡΠΎΡΠ½ΡΠ΅ΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π² Π‘ΠΠ Ρ ΡΡΠ΅ΡΠΎΠΌ Π±Π°Π·ΠΈΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ²) ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²), Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ°. ΠΡΠΎΡ Π°Π»ΡΡΠ½Ρ Π±Π°Π·ΠΈΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΡΠΌΠΈΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° Π‘ΠΠ.
Π‘Π½ΠΎΠ²Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π²ΡΠ΅ΡΡΠΎΡΠΎΠ½Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·ΠΎΡΡΠ΅Π½Π½ΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΏΡΠΎΠ΄ΡΠΊΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΈΠ· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΡΠ³ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΠΎΠ²Π°Π½Ρ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π²ΠΎΠΏΡΠΎΡΠΎΠ², ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄Π»Ρ ΠΈΡ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΈ Π½Π΅ ΡΡΡΡΠΆΠ΄Π°ΡΡ ΡΠ΅Π±Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π½ΡΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠΎ-Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’ΡΠ΅ΡΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠΎΠ±ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΊΠ½Π°ΠΌΠΈ (Π²ΠΊΠ»ΡΡΠ°Ρ Windows) ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ΅Π½Ρ ΡΡΡΠΎΠ³ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ ΠΎΠΊΠΎΠ½Π½ΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ². ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ΠΏΡΠΈΡΠ·Π½Π΅Π½Π½ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΠΏΡΡΡΠΈΡΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π±Ρ ΡΠΎ Π½ΠΈ Π±ΡΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ. Π£ Π²ΡΠ΅Ρ ΡΠ΅ΡΡΡΠ΅Ρ ΡΠΈΠΏΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π΄ΡΡΠ³ Π΄ΡΡΠ³Π° Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±ΠΈΡΡΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΡΡΠ΅Π½Π°ΡΠΈΡΠΌ. Π§ΡΠΎΠ±Ρ ΠΎΠ±Π»Π΅Π³ΡΠΈΡΡ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π±Π΅Π·ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ Π΅Π³ΠΎ ΠΎΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½Π½ΠΎΡΡΠΈ ΠΎ ΠΏΠΎΡΠΎΠΊΠ°Ρ , Π‘ΠΠ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠ°ΠΊ Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ Π΄Π΅ΡΠ°Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ. Π§ΡΠΎΠ±Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΎΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° ΠΈ ΡΠ΅Π΅Π½ΡΠ΅ΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΠΈ (ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ Π²Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ), Π² Π‘ΠΠ ΠΈΠΌΠ΅Π΅ΡΡΡ Π²Π΅ΡΡΠΌΠ° ΡΠΎΡΠΌΠ°Π»ΡΠ½Π°Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠ΅Ρ ΡΠ²ΡΠ·Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. ΠΡΠ° Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ Π½ΠΎΡΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ (apartment)[1] . ΠΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΈΠΌΠ΅ΡΡΠΈΡ ΠΎΠ±ΡΠΈΠΉ Π½Π°Π±ΠΎΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΡ ΠΈ ΡΠ΅Π΅Π½ΡΠ΅ΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π‘ΠΠ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΊ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΡ: ΠΎΠ΄ΠΈΠ½ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ±ΡΠΈΠΌ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, Π±Π΅Π·ΠΎΠ³ΠΎΠ²ΠΎΡΠΎΡΠ½ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, Π½ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠΌ; Π½ΠΎ Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΡ ΠΎΠ±Π»Π°Π΄Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΠΎΠ±ΠΎΠΈΡ ΡΡΠΈΡ ΠΏΠΎΠ½ΡΡΠΈΠΉ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ Π‘ΠΠ, ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅; ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΡΠΎΠ²Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ Π‘ΠΠ, ΠΈΠΌΠ΅Π΅Ρ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΎΠ΄Π½Ρ Π³ΡΡΠΏΠΏΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° ΠΈ ΡΠ΅Π΅Π½ΡΠ΅ΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΠΈ; ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄Π²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ΅, ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ ΠΊ Π΄Π²ΡΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΡ ΠΈ ΡΠ΅Π΅Π½ΡΠ΅ΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΡΠΎΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌ Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΏΠΎΠ½ΡΡΠΈΡΠΌΠΈ ΠΎ ΠΏΠΎΡΠΎΠΊΠ°Ρ ΠΌΠΈΡΠ½ΠΎ ΡΠΎΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΈ ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅.
ΠΠΎΡΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ΅. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π‘ΠΠ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ½Π°ΡΠ°Π»Π° Π²ΠΎΠΉΡΠΈ Π² Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ. ΠΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ Π²Ρ ΠΎΠ΄ΠΈΡ Π² Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ, Π‘ΠΠ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ΅ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎΡΠΎΠΊΠ° (TLS β thread local storage), ΠΈ ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ²ΡΠ·Π°Π½Π° Ρ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΠΏΠΎΠΊΠΈΠ½Π΅Ρ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ. Π‘ΠΠ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ΅, ΡΡΠΎ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎ ΠΏΠΎΡΠΎΠΊΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΏΠ°ΠΌΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠ° ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Π°. Π Π‘ΠΠ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ HRESULT (RPC_E_WRONG_THREAD), ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΡΠΈ ΠΏΡΡΠΌΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠΎΠ². ΠΠ±ΡΠ΅ΠΊΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΡΠΎΡ HRESULT; ΠΎΠ΄Π½Π°ΠΊΠΎ Π»ΠΈΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΆΠ΅Π»Π°ΡΡ ΠΏΡΠΎΠΉΡΠΈ ΡΡΠΎΠ»Ρ Π΄ΠΎΠ»Π³ΠΈΠΉ ΠΏΡΡΡ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ²ΠΎΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
Π Π²Π΅ΡΡΠΈΠΈ Π‘ΠΠ ΠΏΠΎΠ΄ Windows NT 4.0 ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π΄Π²Π° ΡΠΈΠΏΠ° Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠΎΠ²: ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΡ (ΠΠ’Π β multithreaded apartments) ΠΈ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΡ (STA β singlethreaded apartments). Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΠ’Π; ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ STA. ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· ΡΡΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΠΉ, Π² ΠΠ’Π ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π° Π² STA β ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ. Π’ΠΎΡΠ½Π΅Π΅, ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ STA; ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΌΡΡ Π² STA, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅Π»ΡΠ·Ρ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈ ΡΠΎ, ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠ° ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° (affinity) ΠΊ ΠΏΠΎΡΠΎΠΊΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠ° TLS (thread local storage), Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (locks), ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ Win32 ΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ (mutexes)).
ΠΠΎΠ΄ΠΎΠ±Π½Π°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠ΅, Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΅Π΅ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ· ΠΠ’Π, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π°Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠ΅ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ STA Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π²ΡΠ·ΠΎΠ²Ρ ΠΌΠ΅ΡΠΎΠ΄Π°, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΊ Π΄Π°Π½Π½ΠΎΠΌΡ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΡ. Π ΡΠ»ΡΡΠ°Π΅ ΠΠ’Π ΠΏΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΠΊΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², Π²Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ΅. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠΎΠ², ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠΎΠ², ΠΈ Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΡ, ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Π½Π΅ΠΏΠΎΠΌΠ΅ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° Π² ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° STA ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ ΠΎΠ±ΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅. ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ°Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΊΡΡΠΏΠ½ΠΎΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ (coarse-grained) ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΠΎ ΡΠ΄Π°ΡΡΡΡ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ ΠΌΠ°Π»ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ STA .