Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π—Π«Πš ΠŸΠ ΠžΠ“Π ΠΠœΠœΠ˜Π ΠžΠ’ΠΠΠ˜Π― Π‘# 2005 И ΠŸΠ›ΠΠ’Π€ΠžΠ ΠœΠ .NET 2.0. 3-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 114

Автор Π­Π½Π΄Ρ€ΡŽ ВроСлсСн

private bool LoadExternalModule(string path) {

 bool foundSnapIn = false;

 IAppFunctionality itfAppFx;

 // ДинамичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°.

 Assembly theSnapInAsm = Assembly.LΠΎadFrom(path);

 // ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ всСх Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°.

 TΡƒΡ€Π΅[] theTypes = theSnapInAsm.GetTypes();

 // Поиск Ρ‚ΠΈΠΏΠ° с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ IAppFunctionality.

 for (int i = 0; i β€Ή theTypes.Length; i++) {

  Type t = theTypes[i].GetInterface("IAppFunctionality");

  if (t != null) {

   foundSnapIn = true;

   // ДинамичСскоС связываниС для создания Ρ‚ΠΈΠΏΠ°.

   object ΠΎ = theSnapInAsm.CreateInstance(theTypes[i].FullName);

   // Π’Ρ‹Π·ΠΎΠ² DoIt() Ρ‡Π΅Ρ€Π΅Π· интСрфСйс.

   itfAppFx = ΠΎ as IAppFunctionality;

   itfAppFx.DoIt();

   lstLoadedSnapIns.Items.Add(theTypes[i].FullName);

  }

 }

 return foundSnapIn;

}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² CSharpSnapIn.dll ΠΈ VbNetSnapIn.dll Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС. На рис. 12.13 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² выполнСния.

Рис. 12.13. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ²

Π—Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ [CompanyInfo]. Для этого просто ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ LoadExternalModule(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ· контСкста if Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°ΡΡŒ новая Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция DisplayCompanyData(). Π­Ρ‚Π° функция ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° System.Type.

private bool LoadExternalModule(string path) {

 β€¦

 if (t != null) {

  …

  // ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.

  DisplayCompanyData(theTypes[i]);

 }

 return foundSnapIn;

}

Для ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅Π³ΠΎ Π½Π° Π²Ρ…ΠΎΠ΄ Ρ‚ΠΈΠΏΠ° просто ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ [CompanyInfo].

private void DisplayCompanyData(Type t) {

 // ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… [CompanyInfo].

 object[] customAtts = t.GetCustomAttributes(false);

 // Π’Ρ‹Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ….

 foreach (CompanyInfoAttribute с in customAtts) {

  MessageBox.Show(с.Url, String.Format("Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ {0} ΠΈΡ‰ΠΈΡ‚Π΅ ΠΏΠΎ адрСсу", с.Name));

 }

}

ΠŸΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄Π½ΠΎ! На этом рассмотрСниС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ. Π― надСюсь, Ρ‡Ρ‚ΠΎ ΠΊ этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ нашСго обсуТдСния Π²Ρ‹ осознаСтС, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹, прСдставлСнныС Π² этой Π³Π»Π°Π²Π΅, ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ срСдств построСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ CommonSnappableTypes, CSharpSnapIn, VbNetSnapIn ΠΈ MyExtendableApp Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Π³Π»Π°Π²Π΅ 12.

РСзюмС

БСрвис отобраТСния оказываСтся вСсьма интСрСсным аспСктом построСния Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ окруТСния ΠΏΡ€ΠΈ использовании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. Π’ срСдС .NET ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ элСмСнтами сСрвиса отобраТСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏ System.Π’ΡƒΡ€Π΅ ΠΈ пространство ΠΈΠΌΠ΅Π½ System.Reflection. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ прСдставляСт собой процСсс выяснСния основных характСристик ΠΈ возмоТностСй Ρ‚ΠΈΠΏΠ° Π² срСдС выполнСния.

ДинамичСскоС связываниС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ созданиС Ρ‚ΠΈΠΏΠ° ΠΈ Π²Ρ‹Π·ΠΎΠ² Π΅Π³ΠΎ Ρ‡Π»Π΅Π½ΠΎΠ² ΠΏΡ€ΠΈ отсутствий Π°ΠΏΡ€ΠΈΠΎΡ€Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Π°Ρ… ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‡Π»Π΅Π½ΠΎΠ². Как ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создаваСмого Π² этой Π³Π»Π°Π²Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΠ³ΠΎ прилоТСния, это ΠΎΡ‡Π΅Π½ΡŒ мощная Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ создатСлями инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ этик инструмСнтов, Π’ Π³Π»Π°Π²Π΅ Π±Ρ‹Π»Π° Ρ‚Π°ΠΊΠΆΠ΅ рассмотрСна Ρ€ΠΎΠ»ΡŒ программирования с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π² опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² добавляСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ информация Π² ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°.

ГЛАВА 13. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹, Π΄ΠΎΠΌΠ΅Π½Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, контСксты ΠΈ хосты CLR

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π΄Π²ΡƒΡ… Π³Π»Π°Π²Π°Ρ… ΠΌΡ‹ рассмотрСли шаги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π² срСдС CLR ΠΏΡ€ΠΈ выяснСнии ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² размСщСния Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€ΠΎΠ»ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… .NET. Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ рассмотрим подробности Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ CLR ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ, ΠΈ попытаСмся ΠΏΠΎΠ½ΡΡ‚ΡŒ взаимосвязь ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами, Π΄ΠΎΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ контСкстами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π’ сущности, Π΄ΠΎΠΌΠ΅Π½Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (ΠΈΠ»ΠΈ АррDΠΎΡ‚Π°in) ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой логичСскиС ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠ³ΠΎ процСсса, содСрТащиС Π½Π°Π±ΠΎΡ€Ρ‹ связанных ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² .NET. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠΌΠ΅Π½Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ контСкстными Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… .NET-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π‘ использованиСм понятия контСкста срСда CLR ΠΏΠΎΠ΄ΡƒΡ‡Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с особыми трСбованиями ΠΊ срСдС выполнСния Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Обладая ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ срСда CLR ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ, ΠΌΡ‹ с Π²Π°ΠΌΠΈ смоТСм Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ хостинг CLR. Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² Π³Π»Π°Π²Π΅ 1, сама срСда CLR прСдставляСтся (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, отчасти) Ρ„Π°ΠΉΠ»ΠΎΠΌ mscoree.dll. ΠŸΡ€ΠΈ запускС выполняСмого ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Ρ„Π°ΠΉΠ» mscoree.dll загруТаСтся автоматичСски, Π½ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ смоТСтС ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΡ€ΠΈ этом выполняСтся Ρ†Π΅Π»Ρ‹ΠΉ ряд шагов, скрытых ΠΎΡ‚ Π³Π»Π°Π· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… процСссов Win32

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ "процСсс" сущСствовало Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах Windows Π·Π°Π΄ΠΎΠ»Π³ΠΎ Π΄ΠΎ появлСния ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET. Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎ говоря, Ρ‚Π΅Ρ€ΠΌΠΈΠ½ процСсс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обозначСния мноТСства рСсурсов (Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ внСшниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ) ΠΈ выдСляСмой памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π° *.Π΅Ρ…e опСрационная систСма создаСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ процСсс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ всСго "ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°" ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ прилоТСния. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‚Π°ΠΊΠΎΠΉ изоляции ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ срСды выполнСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ‚ΠΊΠ°Π· Π² Π½Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса Π½Π΅ влияСт Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ процСссу Win32 назначаСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ PID (Process ID – ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса), ΠΈ процСсс, ΠΏΡ€ΠΈ нСобходимости, ΠΌΠΎΠΆΠ΅Ρ‚ нСзависимо Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой (ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ срСдствами с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Win32 API). Π’Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ Π² ΠΎΠΊΠ½Π΅ ДиспСтчСр Π·Π°Π΄Π°Π½ Windows (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ клавиш β€ΉCtrl+Shift+Esc>) ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ процСссах, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° машинС, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ PID ΠΈ имя ΠΎΠ±Ρ€Π°Π·Π° (рис. 13.1).

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Если столбСц PID Π² ΠΎΠΊΠ½Π΅ ДиспСтчСр Π·Π°Π΄Π°Ρ‡ Windows Π½Π΅ отобраТаСтся, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² этом ΠΎΠΊΠ½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π’ΠΈΠ΄β†’Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ столбцы… ΠΈΠ· мСню ΠΈ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Π²ΡˆΠ΅ΠΌΡΡ послС этого ΠΎΠΊΠ½Π΅ установитС Ρ„Π»Π°ΠΆΠΎΠΊ Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса (PID).

Рис. 13.1. ДиспСтчСр Π·Π°Π΄Π°Ρ‡ Windows

ΠžΠ±Π·ΠΎΡ€ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс Win32 ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π³Π»Π°Π²Π½Ρ‹ΠΉ "ΠΏΠΎΡ‚ΠΎΠΊ", Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ Π±ΡƒΠ΄Π΅Ρ‚ выяснСно, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, примСняя возмоТности пространства ΠΈΠΌΠ΅Π½ System.Threading, Π½ΠΎ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ для освСщСния вопросов, прСдставлСнных здСсь, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ – это "Π½ΠΈΡ‚ΡŒ" выполнСния Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠ³ΠΎ процСсса. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, созданный Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ…ΠΎΠ΄Π° процСсса, называСтся ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Win32 с графичСским интСрфСйсом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π² качСствС Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° прилоТСния ΠΌΠ΅Ρ‚ΠΎΠ΄ WinMain(). ΠšΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹Π΅ прилоТСния для этой Ρ†Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Main(). ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹, состоящиС ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π±ΡƒΠ΄ΡƒΡ‚ потокоустойчивыми, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π½ΠΈΡ… Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ прилоТСния. Однако ΠΎΠ΄Π½ΠΎ-ΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ процСсс (особСнно Ссли ΠΎΠ½ основан Π½Π° графичСском интСрфСйсС) часто Π±Ρ‹Π²Π°Π΅Ρ‚ "склонСн" Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ достаточно слоТных дСйствий (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, связанных с ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒΡŽ большого тСкстового Ρ„Π°ΠΉΠ»Π°, Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ вычислСниями ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ сСрвСром).

Учитывая эти ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ нСдостатки ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Win32 API позволяСт ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΡƒΡŽ ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Win32 API, ΠΊΠ°ΠΊ CreateThread(). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ (ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ) Π² Ρ‚Π°ΠΊΠΎΠΌ процСссС становится ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтом выполнСния ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊΠΎ всСм ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ элСмСнтам Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° условиях ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сами Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠ³Π»Π° быстрСС Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°. дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ процСссы ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ иллюзию Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ всС дСйствия Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π° ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя. НапримСр, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ для выполнСния дСйствий, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (снова вспомним ΠΎ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ большого Ρ„Π°ΠΉΠ»Π°). Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ созданный Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ снова ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ позволяСт процСссу Π² Ρ†Π΅Π»ΠΎΠΌ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π₯отя Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ этого ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ: использованиС слишком большого числа ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ…ΡƒΠ΄ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ процСссору придСтся часто ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ (Π° это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΌΠ°Π»ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ).