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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# для профСссионалов. Π’ΠΎΠΌ IIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 104

Автор Π‘ΠΈΠΌΠΎΠ½ Робинсон

МоТно Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ΄ экзСмпляры класса PerformanceCounter Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Visual Studio.NET Designer. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Ρ‚Π°ΡΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ PerformanceCounter ΠΈΠ· ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов Π½Π° Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², выводя класс ΠΈΠ· System.ComponentModel.Component. ΠœΠ΅Ρ‚ΠΎΠ΄ InitializeComponent(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для задания свойств ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ автоматичСски, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ лишь Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ².

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² PerformanceCounter

Π”Π°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ PerformanceCounter ΠΈΠ· ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов. Для нашСй слуТбы добавляСтся Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ экзСмпляра, Π³Π΄Π΅ свойство CategoryName задаСтся ΠΊΠ°ΠΊ Quote Service Count для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° свойство CounterName задаСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, доступным Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ. Бвойство ReadOnly Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ΠΎ ΠΊΠ°ΠΊ False.

Код, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» внСсСн Π² InitializeComponent() ΠΏΡƒΡ‚Π΅ΠΌ добавлСния Components Π² конструктор ΠΈ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ свойств, выглядит Ρ‚Π°ΠΊ:

private void InitializeComponent() {

 // ...

 //

 // performanceCounterRequestsPerSec

 //

 this.performanceCounterRequestsPerSec.CategoryName =

  "Quote Service Counts";

 this.performanceCounterRequestsPerSec.CounterName =

  "# of Requests / sec";

 this.performanceCounterRequestsPerSec.ReadOnly = false;

 //

 // performanceCounterBytesSentTotal

 //

 this.performanceCounterBytesSentTotal.CategoryName =

  "Quote Service Counts";

 this.performanceCounterBytesSentTotal.CounterName =

  "# of Bytes sent";

 this.performanceCounterBytesSentTotal.ReadOnly = false;

 //

 // performanceCounterBytesSentPerSec

 //

 this.performanceCounterBytesSentPerSec.CategoryName =

  "Quote Service Counts";

 this.performanceCounterBytesSentPerSec.CounterName =

  "# of Bytes sent / sec";

 this.performanceCounterBytesSentPerSec.ReadOnly = false;

 //

 // performanceCounterRequestsTotal

 //

 this.performanceCounterRequestsTotal.CategoryName =

  "Quote Service Counts";

 this.performanceCounterRequestsTotal.CounterName =

  "# of Requests";

 this.performanceCounterRequestsTotal.Readonly = false;

 // ...

Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ значСния, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Listener() класса QuoteServer. ΠœΠ΅Ρ‚ΠΎΠ΄ Increment() ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ счСтчик Π½Π° 1, ΠΌΠ΅Ρ‚ΠΎΠ΄ IncrementBy() ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ счСтчик Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

Для счСтчиков ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ посСкундныС значСния, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Listener() ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ β€” requestPerSec ΠΈ bytessPerSec:

void protected void Listener() {

 try {

  listener = new TCPListener(port);

  listener.Start();

  while (true) {

   Socket socket = listener.Accept();

   if (socket == null) {

    return;

   }

   string message = GetRandomQuoteOfTheDay();

   UnicodeEncoding encoder = new UnicodeEncoding();

   byte [] buffer = encoder.GetBytes(message);

   socket.Send(buffer, buffer.Length, 0);

   socket.Close();

   performanceCounterRequestsTotal.Increment();

   performanceCounterBytesSentTotal.IncrementBy(nBytes);

   requestsPerSec++;

   bytesPerSec += Bytes;

  }

 } catch (Exception e) {

  string message = "Quote Server failed in Listener: " + e.Message;

  eventLog.WriteEntry(message, EventLogEntryType.Error);

 }

}

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ значСния ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Timer. ΠœΠ΅Ρ‚ΠΎΠ΄ OnTimer() вызываСтся Ρ€Π°Π· Π² сСкунду ΠΈ Π·Π°Π΄Π°Π΅Ρ‚ счСтчики ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойства RawValue класса PerformanceCounter:

protected void OnTimer(object sender, system.EventArgs e) {

 performanceCounterBytesSentPerSec.RawValue = bytesPerSec;

 performanceCounterRequestsPerSec.RawValue = reguestsPerSec;

 bytesPerSec = 0;

 requestsPerSec = 0;

}

perfmon.exe

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ слуТбу. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° Performance ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΈΠ· Administrative Tools|Performance. НаТимая ΠΊΠ½ΠΎΠΏΠΊΡƒ + Π² ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ счСтчики ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Quote Service Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ВсС сконфигурированныС счСтчики ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π² спискС счСтчиков:

ПослС добавлСния счСтчиков ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ счСтчики нашСй слуТбы Π² Ρ…ΠΎΠ΄Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π‘Π»ΡƒΠΆΠ±Π° счСтчика ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Если Π½Π΅ сущСствуСт ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ счСтчика ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Ρ‹Π» ΡƒΠ΄Π°Π»Π΅Π½ сборщиком мусора, счСтчик этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° тСряСтся ΠΈ запускаСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π· с 0. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, состояниС ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² слуТбС счСтчиков ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ .NET Framework слуТба счСтчиков ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ устанавливаСтся Π² систСмС. НСобходимо Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ слуТбу; ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ слуТбу для автоматичСского запуска Π²ΠΎ врСмя Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ систСмы.

Бвойства слуТб Windows 2000

Windows 95, 98 ΠΈ ME Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ слуТбы Windows. Они ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Windows NT, Windows 2000 ΠΈ Windows Π₯Π . Windows 2000 ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько большС свойств для слуТб ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Windows NT. Рассмотрим свойства слуТб Π² Windows 2000.

ИзмСнСния сСтСвого соСдинСния ΠΈ события элСктропитания

Π’ Windows 2000 Π½Π΅ трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ систСма ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Π»Π°ΡΡŒ Ρ‚Π°ΠΊ часто, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² Windows NT; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ систСму, ΠΊΠΎΠ³Π΄Π° измСняСтся адрСс IP, β€” слуТба ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ события ΠΏΡ€ΠΈ смСнС адрСса ΠΈ дСйствуСт соотвСтствСнно. Windows 2000 посылаСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ΄Ρ‹ слуТбам, ΠΊΠΎΠ³Π΄Π° измСняСтся сСтСвоС соСдинСниС:

Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ SERVICE_CONTROL_NETBINDADD ДоступСн Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для соСдинСния. SERVICE_CONTROL_NETBINDREMOVE ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для соСдинСния Π±Ρ‹Π» ΡƒΠ΄Π°Π»Π΅Π½. НСобходимо Π·Π°Π½ΠΎΠ²ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ соСдинСния ΠΈ ΠΎΡ‚ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. SERVICE_CONTROL_NFTBINDENABLED Π Π°Π½Π΅Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ΅ соСдинСниС снова Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ. SERVICE_CONTROL_NETBINDDISABLE Π Π°Π½Π΅Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ΅ соСдинСниС Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ.

Если слуТба ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ соСдинСниС, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π½ΠΎΠ²ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ соСдинСния ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ соСдинСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стали нСдоступными. Π‘Π»ΡƒΠΆΠ±Π° Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° сСтСвыС измСнСния, поэтому ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π΅ трСбуСтся.

Windows 2000 добавляСт Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ управлСния элСктропитаниСм. БущСствуСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° систСмы Π² Π½Π΅Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ состояниС β€” ΠΏΠ°ΠΌΡΡ‚ΡŒ записываСтся Π½Π° диск, поэтому Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π±ΠΎΠ»Π΅Π΅ быстрая Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° систСмы. Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ элСктроэнСргии, ΠΏΡ€ΠΈ этом систСма Π² случаС нСобходимости автоматичСски пробуТдаСтся.

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

ΠšΠ»Π°ΡΡΡ‹ Π² пространствС ΠΈΠΌΠ΅Π½ System.ServiceProcess Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ для этих свойств Windows 2000 Π‘Π»ΡƒΠΆΠ±Π° конфигурируСтся Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π»Π° Π½Π° события ΠΏΠ°ΡƒΠ·Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойства CanPauseAndContinue, ΠΈ задаСтся свойство для управлСния элСктропитаниСм: CanHandlePowerEvent. Π‘Π»ΡƒΠΆΠ±Ρ‹ Windows 2000, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ элСктропитаниСм, Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² SCM с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° API Win32 RegisterServiceCtrlHandlerEx().

Задавая Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ CanHandlePowerEvent ΠΊΠ°ΠΊ True, ΠΌΠ΅Ρ‚ΠΎΠ΄

protected virtual bool OnPowerEvent(PowerBroadcastStatus power Status);

Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ измСнится статус элСктропитания. НСкоторыС ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΈΠ· PowerBroadcastStatus, пСрСчислСны Π½ΠΈΠΆΠ΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅:

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ powerStatus ОписаниС BatteryLow Π‘Π»Π°Π±Ρ‹ΠΉ заряд Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ. НСобходимо ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ слуТбы Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ°. PowerStatusChange ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ элСктропитания ΠΎΡ‚ Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ Π½Π° внСшний источник, ΠΈΠ»ΠΈ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ ΠΎΠΏΡƒΡΡ‚ΠΈΠ»Π°ΡΡŒ Π½ΠΈΠΆΠ΅ допустимого значСния ΠΈ Ρ‚.Π΄. QuerySuspend ΠŸΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΡ систСмных запросов ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π² приостановлСнный Ρ€Π΅ΠΆΠΈΠΌ. МоТно ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ Π² приостановлСнный Ρ€Π΅ΠΆΠΈΠΌ, закрывая Ρ„Π°ΠΉΠ»Ρ‹, Ρ€Π°Π·ΡŠΠ΅Π΄ΠΈΠ½ΡΡ сСтСвыС соСдинСния ΠΈ Ρ‚.Π΄. QuerySuspendFailed ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² приостановлСнный Ρ€Π΅ΠΆΠΈΠΌ Π±Ρ‹Π» ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚ систСмой. МоТно ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ с Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. Suspend Никто Π½Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΠ» запрос ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² приостановлСнный Ρ€Π΅ΠΆΠΈΠΌ. БистСма скоро Π±ΡƒΠ΄Π΅Ρ‚ приостановлСна.

ВосстановлСниС