ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π·Π°ΡΠΈΡΠΈΡΡ ΡΠΈΠΊΠ»Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΡΡΡΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° CRITI-CAL_SECTION, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:
/* Π£ΠΌΠ΅Π½ΡΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π½Π° 2. */
EnterCriticalSection(&csSem);
WaitForSingleObject(hSem, INFINITE);
WaitForSingleObject(hSem, INFINITE);
LeaveCriticalSection (&csSem);
β¦
ReleaseSemaphore(hSem, 2, &PrevCount);
ΠΠΎ ΠΈ ΡΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π² ΡΠ°ΠΊΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅, ΡΡΡΠ°Π΄Π°Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ Π² ΡΡΠ΅ΡΡΠΈΠΊΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΎΡΡΠ°Π΅ΡΡΡ Π΄Π²Π΅ Π΅Π΄ΠΈΠ½ΠΈΡΡ, ΠΈ ΠΏΠΎΡΠΎΠΊΡ Π Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΡΡΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΡ, Π° ΠΏΠΎΡΠΎΠΊΡ Π β ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π΅. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π½Π°ΡΠ½Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠΎΡΠΎΠΊ Π, ΡΠΎ ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ Π΄Π²Π° ΡΠΈΠΊΠ»Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΡΠ΅ΡΡΠ΅ΠΌ, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ Π²Π»Π°Π΄Π΅ΡΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊ Π, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π΅ Π΅Π΄ΠΈΠ½ΠΈΡΡ, ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ.
ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ WaitForMultipleObjects Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΌ ΠΏΠΎ Π΄Π²ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ. ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ², ΡΡΠΎ Π΄Π²Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΡΠ½ΠΊΡΠΈΡ WaitForMultipleObjects Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ 1, ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π±ΡΠ΄ΡΡ Π²ΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ, ΡΡΠΎ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡ ΡΠ°ΠΌΠΎΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅Π»ΠΈ.
ΠΠΎΠ»Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠΈΠΊΠ»ΠΎΠ² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ Π² ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΈ 10.11.
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ Windows Π±ΡΠ»ΠΎ Π±Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅, Π΅ΡΠ»ΠΈ Π±Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΈΠΊΠ»Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠΉ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (atomic multiple-wait operation).
Π‘ΠΎΠ±ΡΡΠΈΡ
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ Π½Π°ΠΌΠΈ ΡΠΈΠΏΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΄ΡΠ° ΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ±ΡΡΠΈΡ (events). ΠΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΠ±ΡΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ ΠΎ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠΎΠ±ΡΡΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
ΠΠ°ΠΆΠ½ΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠ±ΡΡΠΈΡ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ Π²ΡΠ²Π΅ΡΡΠΈ ΠΈΠ· ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π΄Π΅Π»ΡΡΡΡ Π½Π° ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΠ΅ Π²ΡΡΡΠ½ΡΡ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΠ΅, ΠΈ ΡΡΠΎ ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ CreateEvent.
β’ Π‘Π±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΠ΅ Π²ΡΡΡΠ½ΡΡ ΡΠΎΠ±ΡΡΠΈΡ (manual-reset events) ΠΌΠΎΠ³ΡΡ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ, ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΌ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ, ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΡΡΡ Π² Π½Π΅ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ.
β’ ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ (auto-reset event) ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΡΠΎΠ±ΡΡΠΈΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
Π‘ΠΎΠ±ΡΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΏΡΡΡ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ: CreateEvent, OpenEvent, SetEvent, ResetEvent ΠΈ CreateEvent.
HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpsa, BOOL bManualReset, BOOL bInitialState, LPTCSTR lpEventName)
Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅, ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΠΎΠ΅ Π²ΡΡΡΠ½ΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° bManualReset ΡΠ°Π²Π½ΡΠΌ True. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΡΠΌ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ°Π²Π½ΡΠΌ True Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° bInitialState. ΠΠ»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠ±ΡΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ OpenEvent, ΠΏΡΠΈΡΠ΅ΠΌ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ.
ΠΠ»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:
BOOL SetEvent(HANDLE hEvent)
BOOL ResetEvent(HANDLE hEvent)
BOOL PulseEvent(HANDLE hEvent)
ΠΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ SetEvent. ΠΡΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΠΌ, ΡΠΎ ΠΎΠ½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² Π½Π΅ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². Π ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ, ΠΎΠ½ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΡΠΎΡ ΠΏΠΎΡΠΎΠΊ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π²Π΅Π΄Π΅Ρ ΡΠ΅Π±Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΡΠ°Π²Π½ΡΠΌ 1.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π΅ΡΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΠΌ Π²ΡΡΡΠ½ΡΡ, ΡΠΎ ΠΎΠ½ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ResetEvent, ΡΠΊΠ°Π·Π°Π² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. Π ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡΡΡ, Π½ΠΎ Π΄ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ±ΡΠΎΡΠ° ΡΠΎΠ±ΡΡΠΈΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΅Π³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΠ°ΠΊ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡΡΡ.
Π€ΡΠ½ΠΊΡΠΈΡ PulseEvent ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠ΅ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π²ΡΡΡΠ½ΡΡ ΡΠΎΠ±ΡΡΠΈΡ, Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΡΠ°Π·Ρ ΠΆΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ. Π ΡΠ»ΡΡΠ°Π΅ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ PulseEvent ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ²ΡΠ΅ ΠΈΠΌΠ΅ΡΡΡΡ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅
Π₯ΠΎΡΡ Π² ΠΊΠ½ΠΈΠ³Π°Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ Π°Π²ΡΠΎΡΠΎΠ² ΠΈ Π΄Π°ΠΆΠ΅ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°Ρ Microsoft (ΡΠΌ. ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ MSDN, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ PulseEvent) ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ PulseEvent, Π»ΠΈΡΠ½ΠΎ Ρ ΡΡΠΈΡΠ°Ρ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, Π½ΠΎ ΠΈ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠΉ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π² Π΄Π²ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π³Π»Π°Π²Π°Ρ .
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ PulseEvent ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π»ΠΈΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΠΎΠ΅ Π²ΡΡΡΠ½ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ SetEvent. ΠΡΠ΄ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½Ρ, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ WaitForMultipleObjects Π΄Π»Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ Π±ΡΠ΄ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΡΠΎΠ±ΡΡΠΈΠΉ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ±ΡΠΎΡΠ΅Π½Ρ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡΡ.
Π ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΈ 8.5 Π²Π°ΠΌ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ sortMT (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 7.2) Π·Π° ΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π½Π΅ΠΉ ΡΠΎΠ±ΡΡΠΈΠΉ.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠΉ (condition variables) Pthreads Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΡΠ°Π²Π½ΠΈΠΌΡ Ρ ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ ΠΌΡΡΡΠ΅ΠΊΡΠ°ΠΌΠΈ. Π’Π°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠ»ΠΎΠ΄ΠΎΡΠ²ΠΎΡΠ½ΡΠΌ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½ Π² Π³Π»Π°Π²Π΅ 10. ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ pthread_cond_init ΠΈ pthread_cond_destroy. Π€ΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ pthread_cond_wait ΠΈ pthread_cond_timedwait. Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² pthread_cond_signal ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Windows-ΡΡΠ½ΠΊΡΠΈΠΈ PulseEvent Π² ΡΠ»ΡΡΠ°Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π²ΡΠ·ΠΎΠ² pthread_cond_broadcast ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ Π²ΡΠ΅ΠΌ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ PulseEvent, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠΉ ΠΊ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΠΎΠΌΡ Π²ΡΡΡΠ½ΡΡ ΡΠΎΠ±ΡΡΠΈΡ. ΠΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ PulseEvent ΠΈ ResetEvent, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΡ Π²ΡΡΡΠ½ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ, Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
ΠΠ±Π·ΠΎΡ: ΡΠ΅ΡΡΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ
ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΡ ΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΡ Π²ΡΡΡΠ½ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ SetEvent ΠΈ PulseEvent ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ΅ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Π° ΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· Π½ΠΈΡ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π² ΡΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΡΠ°ΠΊ ΡΡΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΈ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡΡ , ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π² ΡΡΠΎΠΉ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π°Ρ .
ΠΡΠ΅Π΄ΠΎΡΡΠ΅ΡΠ΅ΠΆΠ΅Π½ΠΈΠ΅
ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΡΠΎΡΡΡΠ·Π°Π½ΠΈΠΉ, Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠΎΠ½ΠΊΠΈΡ , ΡΡΡΠ΄Π½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ. Π Π³Π»Π°Π²Π΅ 10 ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ, ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΠΎΡΡΠΈ Π²ΠΎ Π²ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΌΡΡ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΡ .
Π ΡΠ°Π±Π». 8.1 ΠΎΠΏΠΈΡΠ°Π½Ρ ΡΠ΅ΡΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ.
Π’Π°Π±Π»ΠΈΡΠ° 8.1. Π‘Π²ΠΎΠ΄Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΡΠ²ΠΎΠΉΡΡΠ² ΡΠΎΠ±ΡΡΠΈΠΉ
ΠΠ±ΡΠ°Π·Π½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ β ΡΡΠΎ Π΄Π²Π΅ΡΡ, ΡΠ½Π°Π±ΠΆΠ΅Π½Π½Π°Ρ ΠΏΡΡΠΆΠΈΠ½ΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π°ΠΊΡΡΡΠΈΠ΅ Π΄Π²Π΅ΡΠΈ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π²ΡΡΡΠ½ΡΡ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΠΎΠ΄ΠΎΠ±ΠΈΡΡ Π΄Π²Π΅ΡΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΡΠΆΠΈΠ½Π° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ, Π±ΡΠ΄ΡΡΠΈ ΡΠ°Π· ΠΎΡΠΊΡΡΡΠΎΠΉ, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡ ΠΌΠ΅ΡΠ°ΡΠΎΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ PulseEvent ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π΄Π²Π΅ΡΡ ΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ Π΅Π΅ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π· Π½Π΅Π΅ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ ΠΎΠ΄Π½Π° (Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ) ΠΈΠ»ΠΈ Π²ΡΠ΅ (Π²ΡΡΡΠ½ΡΡ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ) ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ SetEvent ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π΄Π²Π΅ΡΡ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ Π΅Π΅.