ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Windows
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ (event). ΠΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ: Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΏΠ°ΡΡΠΈΠ²Π½ΠΎΠ΅. ΠΠΎΠ³Π΄Π° ΡΠΎΠ±ΡΡΠΈΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π΅Π³ΠΎ Π²ΠΈΠ΄ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠΎΠΉ ΡΡΠ°Π·Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². Π Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ VCL ΡΠΎΠ±ΡΡΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ TEvent. ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Windows (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
[ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡ]
ΠΠΈΠ½ΠΈΡΡΠ΅ΡΡΡΠ²ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π½Π°ΡΠΊΠΈ ΠΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ
«ΠΠΠ‘ΠΠΠ ΠΠΠ‘Π£ΠΠΠ Π‘Π’ΠΠΠΠΠ«Π Π’ΠΠ₯ΠΠΠ§ΠΠ‘ΠΠΠ Π£ΠΠΠΠΠ Π‘ΠΠ’ΠΠ’»
ΠΠ°ΡΠ΅Π΄ΡΠ° «ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ»
ΠΡΡΡΠΎΠ²Π°Ρ ΡΠ°Π±ΠΎΡΠ°
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Windows
ΠΠΌΡΠΊ 2014
ΠΠ°Π΄Π°Π½ΠΈΠ΅
Π Π°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ², Π ΠΈΠ· N ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π» Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ -999 Π΄ΠΎ 999 Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½ ΡΡΠΈ ΡΠΈΡΠ»Π°. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ Π²ΡΠ²ΠΎΠ΄ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΡΠ΅Π· Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ T, N ΠΈ T Π²Π²ΠΎΠ΄ΡΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π΄Π²ΡΠΌΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π ΠΈ Π‘, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, ΡΠΎΠ·Π΄Π°ΡΡΠΈΠΌ ΠΌΠ°ΡΡΠΈΠ². ΠΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π²ΡΠ²ΠΎΠ΄ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΠΊΠ½Π°, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π² ΡΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.
ΠΠ°Π΄Π°Π½ΠΈΠ΅ B | ΠΠ°Π΄Π°Π½ΠΈΠ΅ C | |
ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ | ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ | |
1. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅Π³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
1.1 ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅Π³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°
[ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡ]
ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° 1 — ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ «START», ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠ»Π΅ΠΉ «N» ΠΈ «Time», ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ³Π½Π°Π» Π½Π° ΠΈΡ Π·Π°ΠΏΡΡΠΊ.
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΎΠ½ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΠΈΠ³Π½Π°Π» ΠΎΠ± Π°ΠΊΡΠΈΠ²ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠ±ΡΡΠΈΠ΅. ΠΠ° Π²ΡΠ΅ΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ (Π±Π»ΠΎΠΊ-ΡΡ Π΅ΠΌΡ 1, 2, 3) ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠ°ΡΡΠΈΠ²Π½ΠΎΠ΅. ΠΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅. ΠΠ° ΡΡΠ΅Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ.
ΠΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ»ΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ «STOP» ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ°ΡΡΡΡ.
ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° 1, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
1.2 ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ° Π³Π»Π°Π²Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π³ΡΡΠΏΠΏΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π΄Π»Ρ Π²Π²ΠΎΠ΄Π°ΠΈ Π²ΡΠ²ΠΎΠ΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
Π’ΡΠΈΠΏΠΎΠ»Ρ (Thread1, Thread2, Thread3) Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
«N» — ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°
«Time» — ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΏΠΎΠ»Ρ (Thread1, Thread2, Thread3).
ΠΠ½ΠΎΠΏΠΊΠ° «START» ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠΎΠΉΠΊΠΈ ΡΠΈΡΠ΅Π» ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° Π½Π° Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ (ΠΈΠ½Π΄Π΅ΠΊΡ). Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅ Π² ΠΏΠΎΠ»Ρ (Thread1, Thread2, Thread3).
ΠΠ½ΠΎΠΏΠΊΠ° «STOP» ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ.
ΠΠ½ΠΎΠΏΠΊΠ° «EXIT» Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΠΈ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅Ρ ΠΈΡ .
Π ΠΈΡΡΠ½ΠΎΠΊ 1 — ΠΠ»Π°Π²Π½Π°Ρ ΡΠΎΡΠΌΠ°
2. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π·Π°Π΄Π°Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ
2.1 ΠΠ΅ΡΠΎΠ΄ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ
[ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡ]
ΠΠ»ΠΎΠΊ-ΡΡ Π΅ΠΌΠ° 1 — ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ ΠΎΡ -999 Π΄ΠΎ 999
2.2 ΠΠ΅ΡΠΎΠ΄ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
[ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡ]
ΠΠ»ΠΎΠΊ ΡΡ Π΅ΠΌΠ° 2 — ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΡΠΈΠΌΠ΅Ρ 1. ΠΠ°Π½ ΠΌΠ°ΡΡΠΈΠ² A = {-359, 126, 803, 913, -716};
Π Π΅ΡΠ΅Π½ΠΈΠ΅:
ΠΠ°ΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ min = 0, max = -359;
A[1] | — 359 — 716 — 359 < min (0); min = -359 — 359 > max (-359); max = -359 | |
A[2] | — 359 — 716 126 < min (-359); min = -359 126 > max (-359); max = 126 | |
A[3] | — 359 — 716 803 < min (-359); min = -359 803 > max (126); max = 803 | |
A[4] | — 359 — 716 913 < min (-359); min = -359 913 > max (803); max = 913 | |
A[5] | — 359 — 716 — 716 < min (-359); min = -716 — 716 > max (803); max = 913 | |
ΠΡΠ²Π΅Ρ: min = -716, max = 913.
2.3 ΠΠ΅ΡΠΎΠ΄ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ
ΠΠ»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ Π²ΡΠ΅Ρ ΡΠΈΡΠ΅Π» Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ: ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ ΡΡΠ΅Π΄Π½Π΅Π΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅;
ΠΠ»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΡΠΈΡΠ΅Π» Π²ΡΡΠΈΡΠ°Π΅ΠΌ ΡΡΠ΅Π΄Π½Π΅Π΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅.
Π‘ΡΠ΅Π΄Π½Π΅Π΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π²Π΅Π»ΠΈΡΠΈΠ½ — ΡΡΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΡΡΠΌΠΌΡ Π²Π΅Π»ΠΈΡΠΈΠ½ ΠΊ ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ.
Π‘ΡΠ΅Π΄Π½Π΅Π΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΡΠΎΡΠΌΡΠ»Π΅
(2) | ||
(3) | ||
ΠΡΠΈΠΌΠ΅Ρ 2. ΠΠ°Π½ ΠΌΠ°ΡΡΠΈΠ² A = {-359, 126, 803, 913, -716};
ΠΠ°ΠΉΡΠΈ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ Π²ΡΠ΅Ρ ΡΠΈΡΠ΅Π» ΠΎΡ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π‘ΡΠΌΠΌΠ° ΡΠΈΡΠ΅Π» Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ (2):
ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ (3):
[ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡ]
ΠΠ»ΠΎΠΊ ΡΡ Π΅ΠΌΠ° 3 — ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ
3. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΎΠ·Π΄Π°Π½ΠΈΡ, ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π½ΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅
3.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² C++Builder ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ TThread.
TThread — Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ ΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΠΊΠ»Π°ΡΡΠ° TThread, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΏΠΎΡΠΎΠΊ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
ΠΠ°ΠΆΠ΄ΡΠΉ Π½ΠΎΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠ° TThread — Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ², ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° TThread, Π΄Π΅Π»Π°Π΅Ρ C++Builder ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΎΡΠΎΠΊ
__fastcallTMyThread:TMyThread (boolCreateSuspended)
: TThread (CreateSuspended)
{
}
//——————————————————————————————————;
// B ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Execute (), Π²ΡΡΠ°Π²ΡΡΠ΅ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ.
void __fastcallTMyThread:Execute ()
{
//—— Place thread code here —-;
}
//——————————————————————————————————-;
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ VCL-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΏΠΎΡΠΎΠΊΠ΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΌΠ΅ΡΠΎΠ΄ Synchronize ()
//—————————————————————————————————————;
void __fastcallThreadLenghtLine:Execute ()
{
FreeOnTerminate = true; // ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π·Π°Π½ΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ
intColN = N/6;
while (true){
sum = 0;
WaitForSingleObject (FMain->g_BusyEvent[1], INFINITE); //ΠΆΠ΄ΡΠΌΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅Π½Π°ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ
ResetEvent (FMain->g_BusyEvent[1]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°
ResetEvent (FMain->g_BusyEvent[0]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°
for (int i = 0; i
sum += CalcLengthLine (FMain->A[i++], FMain->A[i++], FMain->A[i++], FMain->A[i++], FMain->A[i++], FMain->A[i++]);
}
count++;
if (Terminated) break; // ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡΠΈΠ·Π²Π½Π΅ΠΏΠΎΡΠΎΠΊ
Synchronize (&Mon); //Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²
Sleep (T*1000);
}
}
//—————————————————————————————————————;
void __fastcallThreadLenghtLine:Mon ()
{
FLenghtLine->RELenghtLine->Lines->Add (IntToStr (count) + «) «+ FloatToStr (sum));
SetEvent (FMain->g_BusyEvent[0]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ
SetEvent (FMain->g_BusyEvent[1]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ
}
3.2 Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ (event). ΠΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ: Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΏΠ°ΡΡΠΈΠ²Π½ΠΎΠ΅. ΠΠΎΠ³Π΄Π° ΡΠΎΠ±ΡΡΠΈΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π΅Π³ΠΎ Π²ΠΈΠ΄ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠΎΠΉ ΡΡΠ°Π·Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². Π Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ VCL ΡΠΎΠ±ΡΡΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ TEvent.
ΠΠ΅ΡΠΎΠ΄ CreatEvents ():Π‘ΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° TEvent, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ.
ΠΠ΅ΡΠΎΠ΄ ResetEvent (): ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ Π² ΠΏΠ°ΡΡΠΈΠ²Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
ΠΠ΅ΡΠΎΠ΄ SetEvent (): ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ Π² Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
WaitForSingleObject (): ΠΠ°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ ΠΏΠΎΡΠ»ΡΡ ΡΠΈΠ³Π½Π°Π» ΠΎΠ± Π°ΠΊΡΠΈΠ²ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠ±ΡΡΠΈΠ΅.
3.3 ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Ρ ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΡΠ°Π· Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ»Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ° suspend. ΠΠ»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΡΠΎΠΊΠ° Resume. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π²ΡΡΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Ρ. ΠΊ. ΠΌΠ΅ΡΠΎΠ΄ Suspend ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΠΎΡΠΎΠΊΠ°, a Resume ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ. ΠΠΎΡΠΎΠΊ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΡΠ΅ΡΡΠΈΠΊ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ Π² Π½ΠΎΠ»Ρ, Ρ. Π΅., Π΅ΡΠ»ΠΈ Π²Ρ Π²ΡΠ·Π²Π°Π»ΠΈ ΠΏΡΡΡ ΡΠ°Π· ΠΌΠ΅ΡΠΎΠ΄ Suspend, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΅ΡΡΡΠ΅ ΡΠ°Π·Π° Resume, Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ (ΠΏΡΡΡΠΉ) Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° Resume Π΄Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Execute () ΠΈΠ»ΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π§ΡΠΎΠ±Ρ Π·Π°Π½ΡΡΠ°Ρ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΏΠ°ΠΌΡΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π»Π°ΡΡ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ° Π½Π°Π΄ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡFreeOnTerminate=false.
4. ΠΠΈΡΡΠΈΠ½Π³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
Π€Π°ΠΉΠ»UMain.cpp
#include
#pragma hdrstop
#include «UMain.h»
#include «UThread1.h»
#include «UThread2.h»
#include «UThread3.h»
//—————————————————————————————————————;
#pragma package (smart_init)
#pragma resource «*.dfm»
TFMain *FMain;
ThreadCreatMassiv *thread1;
ThreadMinMax *thread2;
ThreadIndex *thread3;
//—————————————————————————————————————;
__fastcallTFMain:TFMain (TComponent* Owner)
: TForm (Owner)
{
}
//—————————————————————————————————————;
void __fastcallTFMain:btnStartClick (TObject *Sender)
{
if (eN->Text == «» || eT->Text == «») {
StatusBar1->Panels->Items[0]->Text="ΠΠ°ΠΏΠΎΠ»Π½ΠΈΡΠ΅Π²ΡΠ΅ΠΏΠΎΠ»Ρ" ;
}else{
StatusBar1->Panels->Items[0]->Text="" ;
reThread1->Clear ();
reThread2->Clear ();
reThread3->Clear ();
g_Event[0] = CreateEvent (NULL, FALSE, FALSE, NULL); //Π‘ΠΎΠ·Π΄Π°ΡΠΌΡΠΎΠ±ΡΡΠΈΠ΅
g_Event[1] = CreateEvent (NULL, FALSE, TRUE, NULL); //Π‘ΠΎΠ·Π΄Π°ΡΠΌΡΠΎΠ±ΡΡΠΈΠ΅
SetEvent (g_Event[0]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ResetEvent (g_Event[1]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
thread1 = newThreadCreatMassiv (true); //ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠΎΡΠΎΠΊ Π² ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ (true)
thread1->N = StrToInt (eN->Text); //ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠΎΡΠΎΠΊΡ
thread1->T = StrToInt (eT->Text);
thread1->Resume (); //ΠΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°
thread2 = new ThreadMinMax (true);
thread2->N = StrToInt (eN->Text);
thread2->T = StrToInt (eT->Text);
thread2->Resume ();
thread3 = new ThreadIndex (true);
thread3->N = StrToInt (eN->Text);
thread3->T = StrToInt (eT->Text);
thread3->Resume ();
}
}
//—————————————————————————————————————;
void __fastcallTFMain:btnStopClick (TObject *Sender)
{
thread1->Suspend (); //ΠΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΠ°Π±ΠΎΡΡΠΏΠΎΡΠΎΠΊΠ°
thread2->Suspend ();
thread3->Suspend ();
}
//—————————————————————————————————————;
void __fastcallTFMain:btnExitClick (TObject *Sender)
{
FMain->Close ();
}
//—————————————————————————————————————;
Π€Π°ΠΉΠ»UThread1.cpp
#include
#pragma hdrstop
#include «UThread1.h»
#include «UMain.h»
#include «UThread2.h»
#pragma package (smart_init)
//—————————————————————————————————————;
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
// Synchronize (&UpdateCaption);
// where UpdateCaption could look like:
// void __fastcallThreadCreatMassiv:UpdateCaption ()
// {
// Form1->Caption = «Updated in a thread» ;
// }
//—————————————————————————————————————;
__fastcallThreadCreatMassiv:ThreadCreatMassiv (boolCreateSuspended)
: TThread (CreateSuspended)
{
}
//—————————————————————————————————————;
void __fastcallThreadCreatMassiv:Execute ()
{
intmin = -999;
intmax = 999;
FreeOnTerminate = true; // ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π·Π°Π½ΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ
while (true) {
WaitForSingleObject (FMain->g_Event[0], INFINITE);
ResetEvent (FMain->g_Event[1]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°
ResetEvent (FMain->g_Event[0]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°
srand (time (NULL));
for (int i = 0; i < N; i++) {
FMain->A[i] = rand () % (min — max) + min; //Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΌΠ°ΡΡΠΈΠ²ΡΠ°Π½Π΄ΠΎΠΌΠ½ΡΠΌΠΈΡΠΈΡΠ»Π°ΠΌΠΈ
}
count++;
if (Terminated) break; // ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ ΠΈΠ· Π²Π½Π΅ ΠΏΠΎΡΠΎΠΊ
Synchronize (&Sinchr); //Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²
Sleep (T*1000);
}
//—————————————————————————————————————;
}
void __fastcallThreadCreatMassiv:Sinchr ()
{
AnsiStringrezult;
for (int i = 0; i < N; i++) {
rezult += IntToStr (FMain->A[i]) + «, «;
SetEvent (FMain->g_Event[0]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ
SetEvent (FMain->g_Event[1]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ
}
FMain->reThread1->Lines->Add (IntToStr (count) + «) «+ rezult); //Π²ΡΠ²ΠΎΠ΄ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ²Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π€Π°ΠΉΠ» Thread2. cpp
#include
#pragma hdrstop
#include «UThread2.h»
#include «UMain.h»
#include «UThread1.h»
#pragma package (smart_init)
//—————————————————————————————————————;
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
// Synchronize (&UpdateCaption);
// where UpdateCaption could look like:
// void __fastcallThreadSredZnach:UpdateCaption ()
// {
// Form1->Caption = «Updated in a thread» ;
// }
//—————————————————————————————————————;
__fastcallThreadMinMax:ThreadMinMax (boolCreateSuspended)
: TThread (CreateSuspended)
{
}
//—————————————————————————————————————;
void __fastcallThreadMinMax:Execute ()
{
FreeOnTerminate = true; // ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π·Π°Π½ΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ
while (true){
WaitForSingleObject (FMain->g_Event[1], INFINITE); //ΠΆΠ΄ΡΠΌΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅Π½Π°ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ
ResetEvent (FMain->g_Event[1]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°
ResetEvent (FMain->g_Event[0]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°
max = 0;
min = 0;
max = FMain->A[0];
for (int i = 0; i
if (FMain->A[i] < min)
{
min = FMain->A[i];
}
if (FMain->A[i] > max)
{
max = FMain->A[i];
}
}
count++;
if (Terminated) break; // ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡΠΈΠ·Π²Π½Π΅ΠΏΠΎΡΠΎΠΊ
Synchronize (&Sinhr); //Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²
Sleep (T*1000);
}
}
//—————————————————————————————————————;
void __fastcallThreadMinMax:Sinhr ()
{
FMain->reThread2->Lines->Add (IntToStr (count) + «) «+ «max = «+ max + «, min = «+ min); //Π²ΡΠ²ΠΎΠ΄ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ²Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ
SetEvent (FMain->g_Event[0]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ
SetEvent (FMain->g_Event[1]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ
}
Π€Π°ΠΉΠ»UThread3.cpp
#include
#pragma hdrstop
#include «UThread3.h»
#include «UMain.h»
#include «UThread1.h»
#include «UThread2.h»
#pragma package (smart_init)
//—————————————————————————————————————;
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
// Synchronize (&UpdateCaption);
// where UpdateCaption could look like:
// void __fastcallThreadIndex:UpdateCaption ()
// {
// Form1->Caption = «Updated in a thread» ;
// }
//—————————————————————————————————————;
__fastcallThreadIndex:ThreadIndex (boolCreateSuspended)
: TThread (CreateSuspended)
{
}
//—————————————————————————————————————;
void __fastcallThreadIndex:Execute ()
{
FreeOnTerminate = true; // ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π·Π°Π½ΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ
inttN = N/3;
while (true){
WaitForSingleObject (FMain->g_Event[1], INFINITE); //ΠΆΠ΄ΡΠΌΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅Π½Π°ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ
ResetEvent (FMain->g_Event[1]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°
ResetEvent (FMain->g_Event[0]); //Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°
rezult = «» ;
for (int i = 0; i < N; i++){
sum += FMain->A[i]; //ΡΡΠΌΠΌΠ° Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°
}
arg = sum/N; // ΡΡΠ΅Π΄Π½Π΅Π΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅
for (int i = 0; i < N; i++){
raz = arg — FMain->A[i]; // ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°
rezult += FloatToStr (raz) + «, «;
}
count++;
if (Terminated) break; // ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ ΠΈΠ·Π²Π½Π΅ ΠΏΠΎΡΠΎΠΊ
Synchronize (&Sinhr); //Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²
Sleep (T*1000);
}
}
//—————————————————————————————————————;
void __fastcallThreadIndex:Sinhr (){
FMain->reThread3->Lines->Add (IntToStr (count) + «) «+ rezult); //Π²ΡΠ²ΠΎΠ΄ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ²Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ
SetEvent (FMain->g_Event[0]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ
SetEvent (FMain->g_Event[1]); //ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ
}
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΠΊΡΡΡΠΎΠ²ΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Π±ΡΠ»ΠΈ ΠΈΠ·ΡΡΠ΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Windows Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² (VCL) BuilderC++.
1) Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ².
2) Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
3) Π£Π½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±ΡΠ»ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π΅Ρ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ², Π ΠΈΠ· N ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π» Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ -999 Π΄ΠΎ 999 Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½ ΡΡΠΈ ΡΠΈΡΠ»Π°.
ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
Π ΡΡΠ΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΡΠΈΡΠ΅Π» ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ.
ΠΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π²ΡΠ²ΠΎΠ΄ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΏΠΎΠ»Ρ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π² ΡΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅.
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ»Π°ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠ±ΡΡΠΈΠΉ.
1. ΠΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΊ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΠΏΠΎ Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Π΅ «ΠΠΠΠ ΠΠ¦ΠΠΠΠΠ«Π Π‘ΠΠ‘Π’ΠΠΠ«» Π΄Π»Ρ ΡΡΡΠ΄Π΅Π½ΡΠΎΠ² 3-Π³ΠΎ ΠΊΡΡΡΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΠΈ 230 102 ΠΠ‘ΠΠΠ£/ ΡΠΎΡΡΠ°Π²ΠΈΡΠ΅Π»Ρ: ΠΊ.Ρ.Π½., Π΄ΠΎΡ. Π. Π. Π¦ΡΠ³Π°Π½Π΅Π½ΠΊΠΎ.
2. Π ΠΈΡ ΡΠ΅Ρ ΠΠΆ. Windows Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΠΎΠ². Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ Win32-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΈ 64-ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Windows / ΠΠ΅Ρ. Ρ Π°Π½Π³Π». — 4-Π΅ ΠΈΠ·Π΄. — Π‘ΠΠ±.: ΠΠΈΡΠ΅Ρ; Π.: ΠΠ·Π΄-Π²ΠΎ «Π ΡΡΡΠΊΠ°Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡ»; 2008. — 720.
3. Π. Π―. ΠΡΡ Π°Π½Π³Π΅Π»ΡΡΠΊΠΈΠΉ — Π‘++ Builder 6 ΠΠ½ΠΈΠ³Π° 1 Π―Π·ΡΠΊ C++. ΠΠΠΠΠ2002 Π³.