рд╕реА ++ рдЗрд╡реЗрдВрдЯреНрд╕ рдкрд░ рд╕реЗрдорд╛рдлреЛрд░

рдЖрдЬ рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдореИрдВрдиреЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ "рдЗрд╡реЗрдВрдЯ" рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕реЗрдорд╛рдлреЛрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред

рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ред

1. рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдо рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рд╕рд░рд▓ - рдХреНрд░рдорд┐рдХ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВред рд╡рд┐рднрд┐рдиреНрди рдзрд╛рдЧреЛрдВ рдХреЛ рдЪрд▓рд╛рдХрд░ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЛ рдХреБрдЫ рдкреНрд░рд╛рдердорд┐рдХ (рдпрд╛ рдРрд╕рд╛ рдирд╣реАрдВ) рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреНрд░рдо рдореЗрдВ рдЪрд▓рд╛рдПрдВред рдЖрдо рддреМрд░ рдкрд░, рд╣рдо рдЙрди рд╕рднреА рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдо рд╕рдордп рдореЗрдВ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ 10,000 рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рдПрдХ рдмрд╛рдд рд╣реИ, рдФрд░ рд╕рд╛рде рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЪреАрдЬ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 100 рд╢рдмреНрджред 100 рдЧреБрдирд╛ рд╕рдордп рдХрд╛ рд▓рд╛рдн (рдкреНрд▓рд╕ рдпрд╛ рдорд╛рдЗрдирд╕, рджреЗрд░реА рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЖрджрд┐)ред рд▓реЗрдХрд┐рди рдореВрд▓ рдХрд╛рд░реНрдп рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдЦреНрдд рдЕрдиреБрдХреНрд░рдо рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ
  • рдлрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдХреНрд╕реНрдЯ рд▓рд┐рдЦреЗрдВ
  • рдлрд╝рд╛рдЗрд▓ рдмрдВрдж рдХрд░реЗрдВ

рдЧреНрд░реАрдирд╣рд╛рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рд╕рдорд╛рдирддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рдм рдХреБрдЫ рдмрд╕ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рд╕реБрд╕рдВрдЧрдд рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдпрд╛ рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ:

  • рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рддреАрди рдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ
  • рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдорд╡рд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ

рдпрд╣рд╛рдВ, рдкрд╣рд▓реЗ рдмрд┐рдВрджреБ рдХреЛ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо, рдирд┐рд╖реНрдХрд░реНрд╖, рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдмрд┐рдВрджреБ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдорд╛рдирд╛рдВрддрд░рд╡рд╛рдж рдХрд╛рд░реНрдп рдмрд╣реБрдд рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдереНрд░реЗрдбреНрд╕ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЯреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

2. рдереНрд░реЗрдб рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг


Windows.h рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдЯреВрд▓ (рддрдерд╛рдХрдерд┐рдд "рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕") рдХрд╛ рдХрд╛рдлреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдореБрдЦреНрдп рд╣реИрдВ: рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрд╖реЗрддреНрд░, рдШрдЯрдирд╛, рдореНрдпреВрдЯреЗрдХреНрд╕, рд╕реЗрдорд╛рдлреЛрд░ред рд╣рд╛рдВ, рд╕реЗрдорд╛рдлреЛрд░ рдХреЗ рд▓рд┐рдП windows.h рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред "рддреЛ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреНрдпреЛрдВ?" рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ рдЦреИрд░, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ред рдФрд░, рджреВрд╕рд░реА рдмрд╛рдд, C ++ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдерд╛ рдиреЗ рдЕрднреА рддрдХ рдХрд┐рд╕реА рдХреЛ рд░реЛрдХрд╛ рдирд╣реАрдВ рд╣реИ :)

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдИрд╡реЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред

рд▓рдВрдмрд┐рдд рдереНрд░реЗрдбреНрд╕ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдИрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдВрдХреЗрдд рд╣реИ - рдЖрдк рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЕрднреА рддрдХ рдирд╣реАрдВред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╣реБрдд рдЕрд░реНрде рд╕реЗ, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдХреБрдЫ рд╕рд┐рдЧреНрдирд▓ рд╕реНрдерд┐рддрд┐ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ (рд░реАрд╕реЗрдЯ / "рдЪрд╛рд▓реВ рдХрд░реЗрдВ")ред

рдЗрд╕рд▓рд┐рдП, windows.h рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдИрд╡реЗрдВрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

HANDLE CreateEvent ( LPSECURITY_ATTRIBUTES lpEventAttributes, //   BOOL bManualReset, //  : TRUE -  BOOL bInitialState, //  : TRUE -  LPCTSTR lpName //   ); 

рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрд╛, рддреЛ NULL рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдШрдЯрдирд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдХреЗрдд рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

 BOOL SetEvent ( HANDLE hEvent //   ); 

рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рдПрдХ рдиреЙрдирдЬрд╝рд░реЛ рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ред

рдЕрдм рдЕрд░реНрдзрдХреБрдВрдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рд╕реЗрдорд╛рдлреЛрд░ рдХреЛ рдПрдХ рд╕рд╛рде рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 1000 рдзрд╛рдЧреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ 2 рд╣реА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдорд╛рдпреЛрдЬрди рд╣реИ рдЬреЛ рдПрдХ рд╕реЗрдорд╛рдлреЛрд░ рдХреА рдорджрдж рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ?

рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рдорд╛рди, рдПрдХ рд╕реЗрдорд╛рдлреЛрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП:

 HANDLE CreateSemaphore ( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, //   LONG lInitialCount, //     LONG lMaximumCount, //    LPCTSTR lpName //   ); 

рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рд╣рдо рд╕реЗрдореАрдлреЛрд░ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ NULL рдорд┐рд▓рддрд╛ рд╣реИред

рд╕реЗрдорд╛рдлреЛрд░ рдХрд╛рдЙрдВрдЯрд░ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ (рдзрд╛рдЧрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдПрдХ рдЦрд╛рд▓реА рдЬрдЧрд╣ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ), рдЗрд╕рд▓рд┐рдП рдЕрд░реНрдз-рдЕрд╡рд╕реНрдерд╛ рдХреЛ рд╕рдордп-рд╕рдордп рдкрд░ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 BOOL ReleaseSemaphore ( HANDLE hSemaphore, //    LONG lReleaseCount, //     LPLONG lpPreviousCount //   ); 

рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИред

рд╕рдорд╛рд░реЛрд╣ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рднреА:

 DWORD WaitForSingleObject( HANDLE hHandle, //   ,     DWORD dwMilliseconds //     ); 

рд▓реМрдЯреЗ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рд╕реЗ, рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ 2 рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ: WAIT_OBJECT_0 - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рд╕рдВрдХреЗрдд рд╣реИ; WAIT_TIMEOUT - рд╣рдо рдЖрд╡рдВрдЯрд┐рдд рд╕рдордп рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╕рд┐рдЧреНрдирд▓ рд╕реНрдерд┐рддрд┐ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗред

3. рдХрд╛рд░реНрдп рд╣реА


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдорд╛рд░рд╛ рдХрд╛рдо рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЕрдкрдиреЗ рдПрдирд╛рд▓реЙрдЧреНрд╕ рд▓рд┐рдЦрдирд╛ рд╣реИред рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рдо "рдкрд╣рд▓реЗ рд╕рдиреНрдирд┐рдХрдЯрди рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди" рдХрд░реЗрдВрдЧреЗред рдореБрдЦреНрдп рдмрд╛рдд рдорд╛рдирдХ рд╕реЗрдорд╛рдлреЛрд░ рдХреА рдорд╛рддреНрд░рд╛рддреНрдордХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб GitHub рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдХрд╛рд░реНрдп рдХреА рд╕рд░рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг, рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓реЗрдЦ рдХреЛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИ :)

Source: https://habr.com/ru/post/hi476940/


All Articles