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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «БистСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² срСдС WindowsΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 71

Автор ДТонсон Π₯Π°Ρ€Ρ‚

ΠžΠ±Ρ€Π°Π·Π½ΠΎ говоря, автоматичСски сбрасываСмоС событиС β€” это Π΄Π²Π΅Ρ€ΡŒ, снабТСнная ΠΏΡ€ΡƒΠΆΠΈΠ½ΠΎΠΉ, которая обСспСчиваСт автоматичСскоС Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΄Π²Π΅Ρ€ΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ сбрасываСмоС событиС ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΠΎΠ΄ΠΎΠ±ΠΈΡ‚ΡŒ Π΄Π²Π΅Ρ€ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΡƒΠΆΠΈΠ½Π° отсутствуСт ΠΈ которая, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ Ρ€Π°Π· ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² Ρ‚Π°ΠΊΠΎΠΌ состоянии. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту ΠΌΠ΅Ρ‚Π°Ρ„ΠΎΡ€Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция PulseEvent ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΄Π²Π΅Ρ€ΡŒ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Π΅ сразу ΠΆΠ΅ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π΅ проходят ΠΎΠ΄Π½Π° (автоматичСски сбрасываСмыС события) ΠΈΠ»ΠΈ всС (Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ сбрасываСмыС события) ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. Ѐункция SetEvent ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΄Π²Π΅Ρ€ΡŒ ΠΈ освобоТдаСт Π΅Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: систСма "ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ/ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ"

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ возмоТности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 8.1 Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ Π΄ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° появится доступноС сообщСниС. Π’Π΅ΠΌ самым устраняСтся ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанная с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ получСния Π½ΠΎΠ²Ρ‹Ρ… сообщСний. Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 8.2) называСтся eventPC.

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

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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 8.2. eventPC: систСма "ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ/ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ", ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ сигналы 

/* Π“Π»Π°Π²Π° 8. eventPC.с */

/* ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° β€” производитСля ΠΈ потрСбитСля. */

/* ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ пСриодичСски создаСт Π±ΡƒΡ„Π΅Ρ€Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ */

/* суммами, ΠΈΠ»ΠΈ "Π±Π»ΠΎΠΊΠΈ сообщСний", ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŽ ΠΎ готовности*/

/* сообщСния. ΠŸΠΎΡ‚ΠΎΠΊ потрСбитСля ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° запрос.*/


#include "EvryThng.h"

#include <time.h>

#define DATA_SIZE 256


typedef struct msg_block_tag { /* Π‘Π»ΠΎΠΊ сообщСния. */

 volatile DWORD f_ready, f_stop; /* Π€Π»Π°Π³ΠΈ готовности ΠΈ прСкращСния сообщСний. */

 volatile DWORD sequence; /* ΠŸΠΎΡ€ΡΠ΄ΠΊΠΎΠ²Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° сообщСния. */

 volatile DWORD nCons, nLost; time_t timestamp;

 HANDLE mguard; /* ΠœΡŒΡŽΡ‚Π΅ΠΊΡ, Π·Π°Ρ‰ΠΈΡ‰Π°ΡŽΡ‰ΠΈΠΉ структуру Π±Π»ΠΎΠΊΠ° сообщСния. */ 

 HANDLE mready; /* Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ". */

 DWORD checksum; /* ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ сумма сообщСния. */

 DWORD data[DATA_SIZE]; /* Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ сообщСния. */

} MSG_BLOCK;


/* … */


DWORD _tmain(DWORD argc, LPTSTR argv[]) {

 DWORD Status, ThId;

 HANDLE produce_h, consume_h;

 /* Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ ΠΈ событиС (автоматичСски сбрасываСмоС) Π² Π±Π»ΠΎΠΊΠ΅ сообщСния. */

 mblock.mguard = CreateMutex(NULL, FALSE, NULL);

 mblock.mready = CreateEvent(NULL, FALSE, FALSE, NULL);

 /* Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ производитСля ΠΈ потрСбитСля; ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΈΡ… Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ.*/

 /* … Как Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ 9.1 … */

 CloseHandle(mblock.mguard);

 CloseHandle(mblock.mready);

 _tprintf(_T("ΠŸΠΎΡ‚ΠΎΠΊΠΈ производитСля ΠΈ потрСбитСля Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅\n"));

 _tprintf(_T("ΠžΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ: %d, ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ: %d, Π˜Π·Π²Π΅ΡΡ‚Π½Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ: %d\n"), mblock.sequence, mblock.nCons, mblock.nLost);

 return 0;

}


DWORD WINAPI produce(void *arg)

/* ΠŸΠΎΡ‚ΠΎΠΊ производитСля β€” созданиС Π½ΠΎΠ²Ρ‹Ρ… сообщСний Ρ‡Π΅Ρ€Π΅Π· случайныС */

/* ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. */

{

 srand((DWORD)time(NULL)); /* Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ число для Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° случайных чисСл. */

 while(!mblock.f_stop) {

  /* Блучайная Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°. */

  Sleep(rand() / 10); /* Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ оТидания ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ сообщСния. */

  /* ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€. */

  WaitForSingleObject(mblock.mguard, INFINITE);

  __try {

   if (!mblock.f_stop) {

    mblock.f_ready = 0;

    MessageFill(&mblock);

    mblock.f_ready = 1;

    mblock.sequence++;

    SetEvent(mblock.mready); /* Π‘ΠΈΠ³Π½Π°Π» "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ". */

   }

  } __finally { ReleaseMutex (mblock.mguard); }

 }

 return 0;

}


DWORD WINAPI consume (void *arg) {

 DWORD ShutDown = 0;

 CHAR command, extra;

 /* ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠžΠ§Π•Π Π•Π”ΠΠžΠ• сообщСниС ΠΏΠΎ запросу ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. */

 while (!ShutDown) { /* ЕдинствСнный ΠΏΠΎΡ‚ΠΎΠΊ, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ доступ ΠΊ стандартным устройствам Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°. */

  _tprintf(_T("\n** Π’Π²Π΅Π΄ΠΈΡ‚Π΅ 'с' для ΠΏΡ€ΠΈΠ΅ΠΌΠ°; 's' для прСкращСния Ρ€Π°Π±ΠΎΡ‚Ρ‹: "));

  _tscanf("%c%c", &command, &extra);

  if (command == 's') {

   WaitForSingleObject(mblock.mguard, INFINITE);

   ShutDown = mblock.f_stop = 1;

   ReleaseMutex(mblock.mguard);

  } else if (command == 'c') {

   /* ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… сообщСний. */

   WaitForSingleObject(mblock.mready, INFINITE);

   WaitForSingleObject(mblock.mguard, INFINITE);

   __try {

    if (!mblock.f_ready) _leave;

    /* ΠžΠΆΠΈΠ΄Π°Ρ‚ΡŒ наступлСниС события, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π° Π³ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ сообщСния. */

    MessageDisplay(&mblock);

    mblock.nCons++;

    mblock.nLost = mblock.sequence – mblock.nCons;

    mblock.f_ready = 0; /* НовыС Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ сообщСния ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚. */

   } __finally { ReleaseMutex (mblock.mguard); }

  } else {

   _tprintf(_T("НСдопустимая ΠΊΠΎΠΌΠ°Π½Π΄Π°. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ.\n"));

  }

 }

 return 0;

}

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

БущСствуСт Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ потрСбитСля, ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½Π½Ρ‹ΠΉ ΠΎ готовности сообщСния, Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅ успССт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ сообщСниС Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊ производитСля сгСнСрируСт Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ сообщСниС Π΄ΠΎ Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ потрСбитСля. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ повСдСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΡ‚ΠΎΠΊ потрСбитСля ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ сообщСниС Π΄Π²Π°ΠΆΠ΄Ρ‹, Ссли Π±Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, прСдусмотрСнная Π² Π½Π°Ρ‡Π°Π»Π΅ try-Π±Π»ΠΎΠΊΠ° потрСбитСля. Π­Ρ‚Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π³Π»Π°Π²Π΅ 10.

ΠžΠ±Π·ΠΎΡ€: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ синхронизации Windows

НаиболСС Π²Π°ΠΆΠ½Ρ‹Π΅ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² синхронизации Windows пСрСчислСны Π² Ρ‚Π°Π±Π». 8.2.


Π’Π°Π±Π»ΠΈΡ†Π° 8.2. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ характСристики ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² синхронизации Windows

CRITICAL_SECTION ΠœΡŒΡŽΡ‚Π΅ΠΊΡ Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ синхронизации НСт Π”Π° Π”Π° Π”Π° Π”ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссов НСт Π”Π° Π”Π° Π”Π° Бинхронизация Π’Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ОТиданиС ОТиданиС ОТиданиС ОсвобоТдСниС Π’Ρ‹Ρ…ΠΎΠ΄ ΠœΡŒΡŽΡ‚Π΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ освобоТдСн ΠΈΠ»ΠΈ оставлСн Π±Π΅Π· контроля. ΠžΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ‚ΡΡ Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetEvent, PulseEvent. ΠŸΡ€Π°Π²Π° владСния Π’ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€Π°Π²Π° Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. Π’Π»Π°Π΄Π΅ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ нСсколько Ρ€Π°Π·, Π½Π΅ блокируя своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π’ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€Π°Π²Π° Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. Π’Π»Π°Π΄Π΅ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ оТидания нСсколько Ρ€Π°Π·, Π½Π΅ блокируя своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ владСния Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ. Доступ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСскольким ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ, число ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ счСтчика. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ владСния Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetEvent ΠΈ PulseEvent ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ освобоТдСния Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈΠ· числа ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ…. ВслСд Π·Π° послСдним освобоТдСниСм ΠΏΡ€Π°Π²Π° владСния Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ приобрСсти ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΈΠ· числа ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ…. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², число ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… опрСдСляСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ счСтчика. ПослС Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ SetEvent ΠΈΠ»ΠΈ PulseEvent ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

ОТиданиС сообщСний ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²