ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ИспользованиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² прилоТСниях Microsoft Windows

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΈ ΠΎΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Ρ‹ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ Ρ€Π°Π· Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ остановки Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ° suspend. Для продолТСния выполнСния приостановлСнного ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠΊΠ° Resume. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‚.ΠΊ. ΠΌΠ΅Ρ‚ΠΎΠ΄ Suspend ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ счСтчик ΠΏΠΎΡ‚ΠΎΠΊΠ°, a Resume ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ИспользованиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² прилоТСниях Microsoft Windows (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

  • Π—Π°Π΄Π°Π½ΠΈΠ΅
  • 1.1 ОписаниС ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°
  • 1.2 Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • 2. ОписаниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π·Π°Π΄Π°Ρ‡, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ
  • 2.1 ΠœΠ΅Ρ‚ΠΎΠ΄ заполнСния массива случайными числами
  • 2.2 ΠœΠ΅Ρ‚ΠΎΠ΄ вычислСния ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
  • 2.3 ΠœΠ΅Ρ‚ΠΎΠ΄ вычислСния ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния ΠΎΡ‚ ΡΡ€Π΅Π΄Π½Π΅Π³ΠΎ арифмСтичСского
  • 3. ОписаниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² создания, уничтоТСния ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅
  • 3.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
  • 3.2 Бинхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
  • 3.3 Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
  • 4 Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
  • Бписок использованной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

Π—Π°Π΄Π°Π½ΠΈΠ΅

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая создаСт Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ случайный массив, А ΠΈΠ· 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 ΠœΠ΅Ρ‚ΠΎΠ΄ вычислСния ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π‘Π»ΠΎΠΊ схСма 3 — ВычислСниС минимального ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 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 ΠœΠ΅Ρ‚ΠΎΠ΄ вычислСния ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния ΠΎΡ‚ ΡΡ€Π΅Π΄Π½Π΅Π³ΠΎ арифмСтичСского

Для вычислСния ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ всСх чисСл Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

1. Находим срСднСС арифмСтичСскоС;

2. Для вычислСния ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° чисСл Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π΅ΠΌ срСднСС арифмСтичСскоС.

Π‘Ρ€Π΅Π΄Π½Π΅Π΅ арифмСтичСскоС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ — это ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ суммы Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ ΠΊ ΠΈΡ… ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Ρƒ.

Π‘Ρ€Π΅Π΄Π½Π΅Π΅ арифмСтичСскоС находится ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅

(2)

(3)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. Π”Π°Π½ массив A = {-359, 126, 803, 913, — 716};

Найти ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ всСх чисСл ΠΎΡ‚ ΡΡ€Π΅Π΄Π½Π΅Π³ΠΎ арифмСтичСского.

РСшСниС:

Π‘ΡƒΠΌΠΌΠ° чисСл Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ (2):

ВычислСниС отклонСния (3):

Π‘Π»ΠΎΠΊ схСма 2 — ВычислСниС ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния ΠΎΡ‚ ΡΡ€Π΅Π΄Π½Π΅Π³ΠΎ арифмСтичСского

3. ОписаниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² создания, уничтоТСния ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅

3.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Для создания ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² C++Builder Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ абстрактный класс TThread.

TThread — абстрактный класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ допускаСт созданиС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° класса TThread, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ выполняСмый ΠΏΠΎΡ‚ΠΎΠΊ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° TThread — Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ выполнСния.

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ экзСмпляров, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ° TThread, Π΄Π΅Π»Π°Π΅Ρ‚ C++Builder ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

__fastcall TMyThread: TMyThread (bool CreateSuspended)

: TThread (CreateSuspended)

{

}

// ——————————————————————————————————;

// B ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Execute (), Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊ выполняСтся.

void __fastcall TMyThread: Execute ()

{

// — - Place thread code here — —;

}

// ———————————————————————————————————

Для получСния бСзопасного доступа ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ свойствами ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ VCL-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ прСдусмотрСн ΠΌΠ΅Ρ‚ΠΎΠ΄ Synchronize ()

// —————————————————————————————————————;

void __fastcall ThreadLenghtLine: Execute ()

{

FreeOnTerminate = true; // ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π°Π½ΡΡ‚ΡƒΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹

int ColN = 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 __fastcall ThreadLenghtLine: 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;

// —————————————————————————————————————;

__fastcall TFMain: TFMain (TComponent* Owner)

: TForm (Owner)

{

}

// —————————————————————————————————————;

void __fastcall TFMain: btnStartClick (TObject *Sender)

{

if (eN->Text == «» || eT->Text == «») {

StatusBar1->Panels->Items — >Text="Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ всС поля" ;

}else{

StatusBar1->Panels->Items — >Text="" ;

reThread1->Clear ();

reThread2->Clear ();

reThread3->Clear ();

g_Event = CreateEvent (NULL, FALSE, FALSE, NULL); // Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ событиС

g_Event = CreateEvent (NULL, FALSE, TRUE, NULL); // Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ событиС

SetEvent (g_Event [0]); // Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ResetEvent (g_Event [1]); // Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

thread1 = new ThreadCreatMassiv (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 __fastcall TFMain: btnStopClick (TObject *Sender)

{

thread1->Suspend (); // ΠŸΡ€ΠΈΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°

thread2->Suspend ();

thread3->Suspend ();

}

// —————————————————————————————————————;

void __fastcall TFMain: 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 __fastcall ThreadCreatMassiv: UpdateCaption ()

// {

// Form1->Caption = «Updated in a thread» ;

// }

// —————————————————————————————————————;

__fastcall ThreadCreatMassiv: ThreadCreatMassiv (bool CreateSuspended)

: TThread (CreateSuspended)

{

}

// —————————————————————————————————————;

void __fastcall ThreadCreatMassiv: Execute ()

{

int min = - 999;

int max = 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 __fastcall ThreadCreatMassiv: Sinchr ()

{

AnsiString rezult;

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 __fastcall ThreadSredZnach: UpdateCaption ()

// {

// Form1->Caption = «Updated in a thread» ;

// }

// —————————————————————————————————————;

__fastcall ThreadMinMax: ThreadMinMax (bool CreateSuspended)

: TThread (CreateSuspended)

{

}

// —————————————————————————————————————;

void __fastcall ThreadMinMax: 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 __fastcall ThreadMinMax: 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 __fastcall ThreadIndex: UpdateCaption ()

// {

// Form1->Caption = «Updated in a thread» ;

// }

// —————————————————————————————————————;

__fastcall ThreadIndex: ThreadIndex (bool CreateSuspended)

: TThread (CreateSuspended)

{

}

// —————————————————————————————————————;

void __fastcall ThreadIndex: Execute ()

{

FreeOnTerminate = true; // ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π°Π½ΡΡ‚ΡƒΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹

int tN = 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 __fastcall ThreadIndex: Sinhr () {

FMain->reThread3->Lines->Add (IntToStr (count) + «)» + rezult); // Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² вычислСния

SetEvent (FMain->g_Event [0]); // Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ

SetEvent (FMain->g_Event [1]); // Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ курсовым ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ основы ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования Π² Windows с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (VCL) Builder C++.

1) Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

2) Бинхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

3) Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ создаСт Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ случайный массив, А ΠΈΠ· N Ρ†Π΅Π»Ρ‹Ρ… чисСл Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ — 999 Π΄ΠΎ 999 Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½ эти числа.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ опрСдСляСтся ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ вычисляСтся ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ всСх чисСл срСднСго арифмСтичСского.

ВсС ΠΏΠΎΡ‚ΠΎΠΊΠΈ выводят Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Ρ‚СкстовыС поля, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π² ΡΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅.

Бинхронизация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ»Π°ΡΡŒ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ событий.

1. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ указания ΠΊ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΠΎ Π΄ΠΈΡΡ†ΠΈΠΏΠ»ΠΈΠ½Π΅ «ΠžΠŸΠ•Π ΠΠ¦Π˜ΠžΠΠΠ«Π• Π‘Π˜Π‘Π’Π•ΠœΠ«» для студСнтов 3-Π³ΠΎ курса ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ 230 102 АБОИУ/ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚Π΅Π»ΡŒ: ΠΊ. Ρ‚. Π½., Π΄ΠΎΡ†.Π’. Н. Π¦Ρ‹Π³Π°Π½Π΅Π½ΠΊΠΎ.

2. Π ΠΈΡ…Ρ‚Π΅Ρ€ Π”ΠΆ. Windows для профСссионалов. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ эффСктивных Win32-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ спСцифики 64-разрядной вСрсии Windows / ΠŸΠ΅Ρ€. Ρ Π°Π½Π³Π». — 4-Π΅ ΠΈΠ·Π΄. — Π‘ΠΏΠ±.: ΠŸΠΈΡ‚Π΅Ρ€; М.: Изд-Π²ΠΎ «Π ΡƒΡΡΠΊΠ°Ρ рСдакция»; 2008. — 720 Ρ‚Ρ€.

3. А. Π―. ΠΡ€Ρ…Π°Π½Π³Π΅Π»ΡŒΡΠΊΠΈΠΉ — Π‘++ Builder 6 Книга 1 Π―Π·Ρ‹ΠΊ C++. Π‘Π˜ΠΠžΠœ 2002 Π³.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ