ΠΡΠΎΡΠ΅ΡΡΡ, Π½ΠΈΡΠΈ ΠΈ Π²ΠΎΠ»ΠΎΠΊΠ½Π° Π² ΠΠ‘ Windows
ΠΡΠΎΡΠ΅ΡΡΡ ΠΈΠ½Π΅ΡΡΠ½Ρ. ΠΡΠ²Π΅ΡΠ°ΡΡ ΠΆΠ΅ Π·Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎΡΡ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π½ΠΈΡΠΈ. ΠΠΈΡΡ (thread) — Π½Π΅ΠΊΠ°Ρ ΡΡΡΠ½ΠΎΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π΅ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΎΠ΄Π½Π° Π½ΠΈΡΡ. ΠΡΠ° ΠΏΠ΅ΡΠ²ΠΈΡΠ½Π°Ρ Π½ΠΈΡΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ°Π»Π΅Π΅ ΡΡΠ° Π½ΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠΎΠ΄ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π½ΠΈΡΠΈ, ΡΠ΅ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½ΠΎΠ²ΡΠ΅ ΠΈ Ρ. Π΄. Π’Π°ΠΊΠΈΠΌ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΡΠΎΡΠ΅ΡΡΡ, Π½ΠΈΡΠΈ ΠΈ Π²ΠΎΠ»ΠΎΠΊΠ½Π° Π² ΠΠ‘ Windows (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π Π΅ΡΠ΅ΡΠ°Ρ ΠΏΠΎ ΡΠ΅ΠΌΠ΅:
" ΠΡΠΎΡΠ΅ΡΡΡ, Π½ΠΈΡΠΈ ΠΈ Π²ΠΎΠ»ΠΎΠΊΠ½Π° Π² ΠΠ‘ Windows"
1. ΠΡΠΎΡΠ΅ΡΡΡ, Π½ΠΈΡΠΈ ΠΈ Π²ΠΎΠ»ΠΎΠΊΠ½Π° Π² ΠΠ‘ Windows
2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
3. ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
4. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΈΡΠ΅ΠΉ
5. ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π½ΠΈΡΠ΅ΠΉ
6. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΎΠ»ΠΎΠΊΠΎΠ½
7. Π£Π½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ»ΠΎΠΊΠΎΠ½
8. Wait-ΡΡΠ½ΠΊΡΠΈΠΈ ΠΡΠ²ΠΎΠ΄Ρ Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
1. ΠΡΠΎΡΠ΅ΡΡΡ, Π½ΠΈΡΠΈ ΠΈ Π²ΠΎΠ»ΠΎΠΊΠ½Π° Π² ΠΠ‘ Windows
ΠΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π₯ΠΎΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅, ΠΎΠ½ΠΈ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄, Π° ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ Π΄Π°Π½Π½ΡΡ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΎΡΠ΅ΡΡ Π² Windows ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
— ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ΅, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΡΠΏΠΈΡΠΎΠΊ ΠΎΡΠΊΡΡΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ², ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ Ρ. Π΄.;
— Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ — Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π°Π΄ΡΠ΅ΡΠΎΠ² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ;
— ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈ Π΄Π°Π½Π½ΡΠ΅, ΠΏΡΠΎΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
ΠΡΠΎΡΠ΅ΡΡΡ ΠΈΠ½Π΅ΡΡΠ½Ρ. ΠΡΠ²Π΅ΡΠ°ΡΡ ΠΆΠ΅ Π·Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎΡΡ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π½ΠΈΡΠΈ. ΠΠΈΡΡ (thread) — Π½Π΅ΠΊΠ°Ρ ΡΡΡΠ½ΠΎΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π΅ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΎΠ΄Π½Π° Π½ΠΈΡΡ. ΠΡΠ° ΠΏΠ΅ΡΠ²ΠΈΡΠ½Π°Ρ Π½ΠΈΡΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ°Π»Π΅Π΅ ΡΡΠ° Π½ΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠΎΠ΄ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π½ΠΈΡΠΈ, ΡΠ΅ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½ΠΎΠ²ΡΠ΅ ΠΈ Ρ. Π΄. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π²Π»Π°Π΄Π΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π½ΠΈΡΡΠΌΠΈ, ΠΈ ΡΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠ΄ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ°ΠΆΠ΄Π°Ρ Π½ΠΈΡΡ ΠΈΠΌΠ΅Π΅Ρ:
— ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½ΠΈΡΠΈ;
— ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π½Π°Π±ΠΎΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΎΡΡΠ°ΠΆΠ°ΡΡΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°;
— Π΄Π²Π° ΡΡΠ΅ΠΊΠ°, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½ΠΈΡΡΡ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΄ΡΠ°, Π° Π΄ΡΡΠ³ΠΎΠΉ — Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅;
— Π·Π°ΠΊΡΡΡΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ Π½ΠΈΡΠΈ (thread local storage, TLS) ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ, run-time Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΠΈ DLL.
Π§ΡΠΎΠ±Ρ Π²ΡΠ΅ Π½ΠΈΡΠΈ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΎΡΠ²ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. Π’Π΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΈΠ»Π»ΡΠ·ΠΈΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½ΠΈΡΠ΅ΠΉ (ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ² Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΈΡΡΠΈΠ½Π½ΡΠΉ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ). Π Windows ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π²ΡΡΠ΅ΡΠ½ΡΡΡΠ΅Π³ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ², Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠ΅Π³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½ΠΈΡΡ Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ, Π³ΠΎΡΠΎΠ²Π°Ρ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠ±ΡΠ°Π½Π½Π°Ρ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π°, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠ²Π°Π½ΡΠΎΠΌ. ΠΠ²Π°Π½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½ΠΈΡΡ, ΠΏΠΎΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΠΏΡΠ΅ΡΠ²Π΅Ρ Π΅Π΅. ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΠΊΠ²Π°Π½ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π³ΠΎΡΠΎΠ²Π° Π»ΠΈ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΡΡΠ³Π°Ρ Π½ΠΈΡΡ Ρ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ (ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠΈΠΌ) ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°. ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΈΡ Π½ΠΈΡΠ΅ΠΉ Π½Π΅ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π½ΠΈΡΠΈ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠ²Π°Π½Ρ. ΠΠ΄Π½Π°ΠΊΠΎ Π½ΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ ΠΊΠ²Π°Π½Ρ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³Π°Ρ Π½ΠΈΡΡ Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ Π³ΠΎΡΠΎΠ²Π° ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠ΅ΠΊΡΡΠ°Ρ Π½ΠΈΡΡ Π²ΡΡΠ΅ΡΠ½ΡΠ΅ΡΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π΅Π΅ ΠΊΠ²Π°Π½Ρ Π΅ΡΠ΅ Π½Π΅ ΠΈΡΡΠ΅ΠΊ.
ΠΠ²Π°Π½Ρ Π½Π΅ ΠΈΠ·ΠΌΠ΅ΡΡΠ΅ΡΡΡ Π² ΠΊΠ°ΠΊΠΈΡ Π±Ρ ΡΠΎ Π½ΠΈ Π±ΡΠ»ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π° Π²ΡΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡΠΈ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΅Π΅ ΠΊΠ²Π°Π½ΡΠ°. ΠΠΎΠ³Π΄Π° Π½ΠΈΡΠΈ Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ²Π°Π½Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π΅Π΅ ΠΊΠ²Π°Π½Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ½ΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Win2000 Professional Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ²Π°Π½ΡΠ° ΡΠ°Π²Π½ΠΎ 6, Π° Π΄Π»Ρ Win2000 Server — 36.
ΠΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ ΠΎΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ°, ΠΈΠ· ΠΊΠ²Π°Π½ΡΠ° Π½ΠΈΡΠΈ Π²ΡΡΠΈΡΠ°Π΅ΡΡΡ 3, ΠΈ ΡΠ°ΠΊ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π½Π΅Ρ Π½ΡΠ»Ρ. Π§Π°ΡΡΠΎΡΠ° ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΎΠ΄Π½ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΡ x86 ΡΠΈΡΡΠ΅ΠΌ ΠΎΠ½ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 10 ΠΌΡ, Π° Π½Π° Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΡ x86 ΡΠΈΡΡΠ΅ΠΌ — 15 ΠΌΡ.
Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΡΡ Π½ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ. ΠΡΠ±ΡΠ°Π² Π½ΠΎΠ²ΡΡ Π½ΠΈΡΡ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ. ΠΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ Π½ΠΈΡΠΈ (ΡΠ΅Π³ΠΈΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ΅ΠΊ ΡΠ΄ΡΠ° ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΡΠ΅ΠΊ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½ΠΈΡΡ ΠΈ Π΄Ρ.), ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΄Π»Ρ Π΄ΡΡΠ³ΠΎΠΉ Π½ΠΈΡΠΈ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π½ΠΈΡΠΈ.
ΠΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Windows ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π½ΠΈΡΠ΅ΠΉ, Π° Π½Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, Π° Π»ΠΈΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ΅ΡΡΡΡΡ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½ΠΈΡΠ΅ΠΉ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½ΠΈΡΠ΅ΠΉ, ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ°Π΅Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ, Π ΠΈΠΌΠ΅Π΅Ρ 10 Π³ΠΎΡΠΎΠ²ΡΡ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½ΠΈΡΠ΅ΠΉ, Π° ΠΏΡΠΎΡΠ΅ΡΡ Π — Π΄Π²Π΅, ΠΈ Π²ΡΠ΅ 12 Π½ΠΈΡΠ΅ΠΉ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΡ 1/12 ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
Π Windows ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ 32 ΡΡΠΎΠ²Π½Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°, ΠΎΡ 0 Π΄ΠΎ 31. ΠΠ½ΠΈ Π³ΡΡΠΏΠΏΠΈΡΡΡΡΡΡ ΡΠ°ΠΊ: 31−16 — ΡΡΠΎΠ²Π½ΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ; 15−1 — Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠΎΠ²Π½ΠΈ; 0 — ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ, Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΈΡ (zero-page thread).
ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡΠΈ (Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π½ΠΈΡΠΈ) ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ· ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° Π΅Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° ΡΠ°ΠΌΠΎΠΉ Π½ΠΈΡΠΈ. ΠΡΡΡ ΡΠ΅ΠΌΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² Π½ΠΈΡΠ΅ΠΉ:
Normal: ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°;
Above normal: +1 ΠΊ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°;
Below normal: -1;
Highest: +2;
Lowest: -2;
Time critical: ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π»Ρ Real time ΠΊΠ»Π°ΡΡΠ° Π² 31,
Π΄Π»Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² — Π² 15;
Idle: ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠ° Π΄Π»Ρ Real time ΠΊΠ»Π°ΡΡΠ° Π² 16,
Π΄Π»Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² — Π² 1.
ΠΡΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π° ΠΌΠ°ΡΠΈΠ½Π΅, Π³Π΄Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π½ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π° Π»ΡΠ±ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ , Π½Π°Π±ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ², Π½Π° ΠΊΠΎΡΠΎΡΡΡ Π½ΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½. ΠΡΠΎ ΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΎΠΉ ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌ (processor affinity). ΠΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ, ΡΠ΅ΡΠ΅Π· Win32_ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΎΠ»ΠΎΠΊΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π² WIN32 API, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Windows2000. ΠΠΎΠ΄ Π²ΠΎΠ»ΠΎΠΊΠ½ΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠΏΡΠΎΡΠ΅Π½Π½Π°Ρ Π½ΠΈΡΡ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ ΡΠ°ΠΌΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π° Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΠ‘. ΠΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ»ΠΎΠΊΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ Π²ΠΎΠ»ΠΎΠΊΠΎΠ½. ΠΠΎΠ»ΠΎΠΊΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π½ΠΈΡΠ΅ΠΉ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΈ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΏΠΎΠ»Π½ΡΡ ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Ρ Π½ΠΈΡΡΠΌΠΈ. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΈΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΎΠ»ΠΎΠΊΠΎΠ½. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΎΠ»ΠΎΠΊΠ½Π° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΡΠ΅ΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π²ΠΎΠ»ΠΎΠΊΠ½Π°.
2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Win32 ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ°ΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠ°ΠΊ CreateProcess, CreateProcessAsUser (Π΄Π»Ρ WinNT/2000/Vista) ΠΈ CreateProcessWithLogonW (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Win2000) ΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΠΏΠΎΠ²:
— ΠΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΉΠ» ΠΎΠ±ΡΠ°Π·Π° (EXE), ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅. ΠΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Win32 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠΎ ΠΈΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π· ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ (support image) Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΉΠ» Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ. bat, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ cmd. exe ΠΈ Ρ. ΠΏ.
Π WinNT/2000/Vista Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅. CreateProcess, Π½Π°ΠΉΠ΄Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ Win32 ΡΠ°ΠΉΠ», ΠΈΡΠ΅Ρ Π² SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Option ΡΠ°Π·Π΄Π΅Π» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π·Π°ΡΠ΅ΠΌ ΠΈΡΠ΅Ρ Π² Π½Π΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Debugger, ΠΈ Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° Π½Π΅ ΠΏΡΡΡΠ°, Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΎ, ΡΡΠΎ Π² Π½Π΅ΠΉ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
— Π‘ΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Win32 «ΠΏΡΠΎΡΠ΅ΡΡ».
— Π‘ΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½Π°Ρ Π½ΠΈΡΡ (ΡΡΠ΅ΠΊ, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ «Π½ΠΈΡΡ»).
— ΠΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° Win32 ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΠ΅ΡΡΡ ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ Π½ΠΈΡΠΈ.
— ΠΠ°ΡΠΈΠ½Π°Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ Π½ΠΈΡΠΈ.
— Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ DLL) ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
3. ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
ΠΡΠΎΡΠ΅ΡΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π΅ΡΠ»ΠΈ:
— ΠΡ ΠΎΠ΄Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ Π½ΠΈΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΠ»Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
— ΠΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡΠ΅ΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²ΡΠ·Π²Π°Π»Π° ΡΡΠ½ΠΊΡΠΈΡ ExitProcess.
— ΠΠΈΡΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²ΡΠ·Π²Π°Π»Π° ΡΡΠ½ΠΊΡΠΈΡ TerminateProcess.
ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, Π²ΡΠ΅ UserΠΈ GDI_ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, ΡΠ½ΠΈΡΡΠΎΠΆΠ°ΡΡΡΡ, ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ΄ΡΠ° Π·Π°ΠΊΡΡΠ²Π°ΡΡΡΡ (Π΅ΡΠ»ΠΈ ΠΈΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ), Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅ΡΡΡ.
ΠΡΠΈΠΌΠ΅Ρ: ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ «ΠΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ».
#include
int main (int argc, char* argv[])
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory (&si, sizeof (si));
si.cb = sizeof (si);
ZeroMemory (&pi, sizeof (pi));
if (! CreateProcess (NULL, «c:\windows\calc.exe», NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi))
return 0;
// Close process and thread handles.
CloseHandle (pi.hProcess);
CloseHandle (pi.hThread);
return 0;
}
4. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΈΡΠ΅ΠΉ
ΠΠ΅ΡΠ²ΠΈΡΠ½Π°Ρ Π½ΠΈΡΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ Π½ΠΈΡΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ CreateThread ΠΈ CreateRemoteThread (ΡΠΎΠ»ΡΠΊΠΎ Π² WinNT/2000/XP/Vista).
5. ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π½ΠΈΡΠ΅ΠΉ
ΠΠΈΡΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π΅ΡΠ»ΠΈ
— Π€ΡΠ½ΠΊΡΠΈΡ Π½ΠΈΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
— ΠΠΈΡΡ ΡΠ°ΠΌΠΎΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅ΡΡΡ, Π²ΡΠ·Π²Π°Π² ExitThread.
— ΠΡΡΠ³Π°Ρ Π½ΠΈΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅Ρ TerminateThread.
— ΠΠ°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π΄Π°Π½Π½ΡΡ Π½ΠΈΡΡ.
6. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΎΠ»ΠΎΠΊΠΎΠ½
ΠΠΎΠ»ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° CreateFiber ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π½ΠΈΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ ΠΏΡΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π½ΠΈΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ConvertThreadToFiber. ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΠΎΠ»ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ SwitchToFiber, Π½ΠΎ Π΅Π΅ Π²ΡΠ·ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π²ΠΎΠ»ΠΎΠΊΠ½Π°.
ΠΡΠΈΠΌΠ΅Ρ: ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ 4 Π²ΠΎΠ»ΠΎΠΊΠ½Π°, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π²ΠΎΠ»ΠΎΠΊΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΡΠΈΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π±ΠΎΠ»ΡΡΠ΅ 10, ΡΠ°Π±ΠΎΡΠ° Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ.
// Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π²ΠΎΠ»ΠΎΠΊΠ½Π°ΠΌΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ 2 ΡΡΡΠΎΠΊΠΈ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Ρ!
#define WIN32_LEAN_AND_MEAN
#define _WIN32_WINNT 0×0400
#include «stdio.h»
#include «windows.h»
int Counter;
void *fiber[5];
void WINAPI Func (void *)
{
for (;) {
printf («Fiber Number % dn», Counter % 4);
if ((Counter++)<10) {
SwitchToFiber (fiber[Counter % 4]);
} else break;
}
}
int main (int argc, char* argv[])
{
Counter=0;
fiber[0]=CreateFiber (0, Func, NULL);
fiber[1]=CreateFiber (0, Func, NULL);
fiber[2]=CreateFiber (0, Func, NULL);
fiber[3]=CreateFiber (0, Func, NULL);
// Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²ΠΎΠ»ΠΎΠΊΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΡ Π½ΠΈΡΡ Π² Π²ΠΎΠ»ΠΎΠΊΠ½ΠΎ
fiber[4]=ConvertThreadToFiber (NULL);
SwitchToFiber (fiber[0]);
return 0;
}
7. Π£Π½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ»ΠΎΠΊΠΎΠ½
ΠΠ»Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ Π²ΠΎΠ»ΠΎΠΊΠ½Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ DeleteFiber. Π’Π°ΠΊΠΆΠ΅ Π΄Π»Ρ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ Π²ΠΎΠ»ΠΎΠΊΠ½Π° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ Π½ΠΈΡΠ΅ΠΉ.
8. Wait-ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΠ»Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π½ΠΈΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ.
Π€ΡΠ½ΠΊΡΠΈΡ Sleep () ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Π½ΠΈΡΠΈ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄. ΠΡΠ»ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π²Ρ ΡΠΊΠ°ΠΆΠΈΡΠ΅ 0 ms, ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅. ΠΠΈΡΡ ΠΎΡΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠ²Π°Π½ΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡΡ ΠΆΠ΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ Π½ΠΈΡΠ΅ΠΉ, Π³ΠΎΡΠΎΠ²ΡΡ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½ΠΈΡΠ΅ΠΉ (Π²Π΅ΡΠ½Π΅Π΅ ΡΠΊΠ°Π·Π°ΡΡ, ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ — Π²Π΅Π΄Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½ΠΈΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΡΠ° ΠΆΠ΅ ΡΠ°ΠΌΠ°Ρ).
ΠΡΠΈΠΌΠ΅Ρ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ «ΠΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ» ΠΈ ΡΠ΅ΡΠ΅Π· 15 ΡΠ΅ΠΊΡΠ½Π΄ Π΅Π³ΠΎ ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅Ρ.
#include
int main (int argc, char* argv[])
{
STARTUPINFO StartUpInfo;
PROCESS_INFORMATION ProcessInfo;
memset (&StartUpInfo, 0, sizeof (STARTUPINFO));
StartUpInfo.cb=sizeof (STARTUPINFO);
If (CreateProcess (NULL, «c:\windows\calc.exe», NULL, NULL, FALSE,
NORMAL_PRIORITY_CLASS, NULL, NULL,&StartUpInfo,&ProcessInfo))
{
Sleep (15 000);
TerminateProcess (ProcessInfo.hProcess, 0);
}
ExitProcess (0);
}
Π€ΡΠ½ΠΊΡΠΈΡ WaitForSingleObject () ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½ΠΈΡΠΈ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ:
— ΠΈΡΡΠ΅ΡΠ΅Ρ ΡΠ°ΠΉΠΌΠ°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ;
— ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅Ρ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ (signaled) ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
ΠΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠ· Π΄Π²ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ. ΠΠΆΠΈΠ΄Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ wait_ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠ΄ΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠ΅ΠΊΡ «ΠΏΡΠΎΡΠ΅ΡΡ» ΠΈΠ»ΠΈ «Π½ΠΈΡΡ», ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π·Π°Π²Π΅ΡΡΠ°Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ.
Π€ΡΠ½ΠΊΡΠΈΠΈ WaitForMultipleObjects ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠ°Π·Ρ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ ΡΡΠ°Π·Ρ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ .
ΠΡΠΈΠΌΠ΅Ρ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄Π²Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ Π½ΠΈΡΠΈ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ. ΠΠΈΡΠΈ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ ΠΈΠΌ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
#include
#include
unsigned ThreadFunc (void * arg)
{
char ** str = (char**) arg;
MessageBox (0, str[0], str[1], 0);
ExitThread (0);
return 0;
}
int main (int argc, char* argv[])
{
char * InitStr1 = {"First thread running!", «11 111"}; // ΡΡΡΠΎΠΊΠ° Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π½ΠΈΡΠΈ
char * InitStr2 = {"Second thread running!", «22 222"}; // ΡΡΡΠΎΠΊΠ° Π΄Π»Ρ Π²ΡΠΎΡΠΎΠΉ Π½ΠΈΡΠΈ
unsigned long uThreadIDs[2];
HANDLE hThreads[2];
hThreads[0] = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) ThreadFunc,
InitStr1, 0,&uThreadIDs[0]);
hThreads[1] = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) ThreadFunc,
InitStr2, 0,&uThreadIDs[1]);
// ΠΠ΄Π΅ΠΌ, ΠΏΠΎΠΊΠ° Π½ΠΈΡΠΈ Π½Π΅ Π·Π°Π²Π΅ΡΡΠ°Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ
WaitForMultipleObjects (2, hThreads, TRUE, INFINITE);
// ΠΠ°ΠΊΡΡΠ²Π°Π΅ΠΌ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ
CloseHandle (hThreads[0]);
CloseHandle (hThreads[1]);
return 0;
}
ΠΡΠ²ΠΎΠ΄Ρ
Π ΡΠ΅ΡΠ΅ΡΠ°ΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ WIN API ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΎΡΠ΅ΡΠ°ΠΌΠΈ, Π½ΠΈΡΡΠΌΠΈ ΠΈ ΡΠΎΠ»ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈΠΈ Π²ΠΌΠΈΠ½Π΄ΠΎΡΠ·-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ. ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ Π²ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΉ WIN32 API Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΏΠΎΠΌΠΎΡΠΈ MS SDK, Π²Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ Π² ΡΠΎΡΡΠ°Π² ΡΡΠ΅Π΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Borland Delphi ΠΈΠ»ΠΈ CBuilder, Π° ΡΠ°ΠΊΠΆΠ΅ MSDN, ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌ Π² ΡΠΎΡΡΠ°Π²Π΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Visual C.
1. ΠΡΡΡΠΈ ΠΠ°Π½Ρ. ΠΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΠ΅ ΡΠ΅ΡΠΈ ΠΏΠ΅Ρ. Ρ Π°Π½Π³Π». — Π.: ΠΠΠΠΠ, 1996.
2. ΠΠ»ΠΎΡΡΠ°ΡΠΈΠΉ ΡΠ΅ΡΠ΅Π²ΡΡ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ² http://www.bilim.com/koi8/library/glossary/
3. ΠΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΠ΅ ΡΠ΅ΡΠΈ: Π£ΡΠ΅Π±Π½ΡΠΉ ΠΊΡΡΡ Microsoft Corporation — Π.: ΠΠ·Π΄Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΎΡΠ΄Π΅Π» «Π ΡΡΡΠΊΠ°Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡ», 1999.
4. ΠΡΠ½ΠΎΠ²Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΏΠΎΠ΄ ΡΠ΅Π΄Π°ΠΊΡΠΈΠ΅ΠΉ Π. Π. Π₯ΠΎΠΌΠΎΠ½Π΅Π½ΠΊΠΎ — Π‘ΠΠ± ΠΠΠ ΠΠΠ ΠΏΡΠΈΠ½Ρ, 1998.
5. Π Π΅ΡΡΡΡΡ Microsoft Windows NT Workstation 4.0 ΠΏΠ΅Ρ. Ρ Π°Π½Π³Π». ΡΠ·. BNV — Π‘ΠΠ±, 1998.
6. Π‘Π΅ΡΠ΅Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π. Π. ΠΠ»ΠΈΡΠ΅Ρ, Π. Π. ΠΠ»ΠΈΡΠ΅Ρ, 2001, Π‘ΠΠ±, ΠΠΈΡΠ΅Ρ, 544 ΡΡΡ.
7. Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π½ΠΈΡΠ΅ΠΉ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π² ΠΠ‘ Windows, http://subscribe.ru/ archive/comp.soft.win.swodniwgniqaf/200 305/23131921.text
8. Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ, Π. Π’Π°Π½Π΅Π½Π±Π°ΡΠΌ, 2002, Π‘ΠΠ±, ΠΠΈΡΠ΅Ρ, 1040 ΡΡΡ.
9. Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ Novell Netware 4 Π‘. Π. ΠΡΠ»ΠΎΠ², ΠΏΠΎ Π·Π°ΠΊΠ°Π·Ρ ΠΠΠ¦ «ΠΠΎΠΏΡΡΡΠΈ», 1994.
10. Π’ΠΈΡΡΠ΅Π» ΠΠ΄, Π₯Π°Π΄ΡΠΎΠ½ ΠΡΡΡ, ΠΠΆ. ΠΠ°ΠΉΠΊΠ» Π‘ΡΡΠ°ΡΠ΄ Networking Essentials — Π‘ΠΠ± ΠΠΠ’ΠΠ , 1999.
11. Π’ΠΈΡΡΠ΅Π» ΠΠ΄, Π₯Π°Π΄ΡΠΎΠ½ ΠΡΡΡ, ΠΠΆ. ΠΠ°ΠΉΠΊΠ» Π‘ΡΡΠ°ΡΠ΄ TCP/IP — Π‘ΠΠ± ΠΠΠ’ΠΠ , 1999.
12. Π―ΠΊΡΠ±Π°ΠΉΡΠΈΡ Π. Π. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΡΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ: Π‘ΠΏΡΠ°Π²ΠΎΡΠ½Π°Ρ ΠΊΠ½ΠΈΠ³Π°. — Π.: Π€ΠΈΠ½Π°Π½ΡΡ ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°, 1996.