рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ "рдкреНрд░рддрд┐рдорд╛рди"

рдЬрдм рдореИрдВрдиреЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╕реАрдЦрд╛, рддреЛ рдореИрдВрдиреЗ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рд╛рд╣рд┐рддреНрдп рдФрд░ рд╕рдВрджрд░реНрдн рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рд╛ред рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмреАрдЪ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИред рдореИрдВрдиреЗ рд╢рдВрдХреБ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рднрд░рд╛, рдФрд░ рдЕрднреА рднреА рдХрднреА-рдХрднреА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рд╕рд┐рд░ рдкрд░ рдорд┐рд▓рддрд╛ рд╣реИред рдЦреБрдж рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╕рдЦреНрддреА рд╕реЗ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдореБрдЭреЗ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИред

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

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЕрдореВрд░реНрдд рдХреЗ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдкрд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдкрдиреА рд╢реИрд▓реА рд╕рд╛рдЭрд╛ рдХрд░реВрдБрдЧрд╛ред рдЪреВрдВрдХрд┐ рдореИрдВ рдПрдХ рдбреЗрд▓реНрдлрд╝рд┐рд╕реНрдЯ рд╣реВрдВ, рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдбреЗрд▓реНрдлреА рдореЗрдВ рд╣реЛрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рднреА рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдЪ рд╣реИ (рдЬреЛ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ)

рдереНрд░реЗрдб рд╕реЗрдл рдСрдмреНрдЬреЗрдХреНрдЯ


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

рдЕрд╡рд░реБрджреНрдз


рд╡рд┐рд╡рд░рдг

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

рдЙрджрд╛рд╣рд░рдг

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЧрддрд┐рд░реЛрдз рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреА рдХреБрдВрдЬреА рд╣реИред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рдореИрдВ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╡рд░реНрдЧ рд╣реИрдВ:
TMyObj = class private FCS: TCriticalSection; FA: Integer; FB: Integer; public property A: Integer read GetA write SetA; property B: Integer read GetB write SetB; function DoSomething: Integer; //...  end; 

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдереНрд░реЗрдб рд╕реЗрдл рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдореИрдВрдиреЗ рдЧреЗрдЯрд░реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдП рдФрд░ рдмреА рдЧреБрдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб рдХреЗ рд╕рд╛рде рдмрд╕рддрд╛ рд╣реИ:
 function TMyObj.GetA: Integer; begin FCS.Enter; try Result := FA; finally FCS.Leave; end; end; function TMyObj.GetB: Integer; begin FCS.Enter; try Result := FB; finally FCS.Leave; end; end; procedure TMyObj.SetA(const Value: Integer); begin FCS.Enter; try FA := Value; finally FCS.Leave; end; end; procedure TMyObj.SetB(const Value: Integer); begin FCS.Enter; try FB := Value; finally FCS.Leave; end; end; 

рдорд╛рди рд▓реЗрдВ рдХрд┐ DoSomething рдлрд╝рдВрдХреНрд╢рди A рдФрд░ B рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
 function TMyObj.DoSomething: Integer; begin Result := SendMessage(SomeHandle, WM_MYMESSAGE, A mod 3, B mod 4); end; 

рдЕрд░реЗ, рд▓реЗрдХрд┐рди рд╣рдо рдП рдФрд░ рдмреА рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреБрднрд╡рд╣реАрди рд▓реЗрдЦрдХ рдХрд╣реЗрдВрдЧреЗред рдФрд░ рддреБрд░рдВрдд рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХрд╛ "рдЕрдиреБрдХреВрд▓рди" рдХрд░рддрд╛ рд╣реИ:
 function TMyObj.DoSomething: Integer; begin FCS.Enter; try Result := SendMessage(SomeHandle, WM_MYMESSAGE, FA mod 3, FB mod 4); finally FCS.Leave; end; end; 

рдФрд░ рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реЛрдЧреАред рдЕрдм, рдпрджрд┐ рд╣рдо WM_MYMESSAGE рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдлрд╝реАрд▓реНрдб A рдпрд╛ B рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЧрддрд┐рд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЧрддрд┐рд░реЛрдз рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдЫреЛрдЯреА рд╣реИ, рдбреЗрдЯрд╛ рд╕рд░рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм, рдХреЛрдб рдмрдбрд╝рд╛ рд╣реЛрдиреЗ рдкрд░, рд░рд┐рд╢реНрддреЛрдВ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдирд┐рдпрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ - рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдЗрд╕ рддрд░рд╣ "рдЕрдиреБрдХреВрд▓рд┐рдд" рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 function TMyObj.DoSomething: Integer; var k, n: Integer; begin FCS.Enter; try k := FA mod 3; n := FB mod 4; finally FCS.Leave; end; Result := SendMessage(SomeHandle, WM_MYMESSAGE, k, n); end; 

рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрд╢рд╛, рдПрдХ рдирдпрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ - рдЖрдкрдХреЛ рдЕрдиреНрдп рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рдХреЛрдб:
 FCS1.Enter; try //bla bla bla FCS2.Enter; try //bla bla bla finally FCS2.Leave; end; //bla bla bla finally FCS1.Leave; end; 

рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕реЗ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдмрд╛рдп-рдХреЛрдб рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ:
 FCS1.Enter; try //bla bla bla //bla bla bla //  / ,       FCS2 finally FCS1.Leave; end; FCS2.Enter; try //   / //bla bla bla finally FCS2.Leave; end; 

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

рдирд┐рджрд╛рди

рд╕рдВрдХрд▓рди рд╕реНрддрд░ рдкрд░, рдЗрд╕рдХрд╛ рдирд┐рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдирд┐рджрд╛рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдбреЗрд▓реНрдлреА рдкрд░ рдПрдХ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдЙрдкрдХрд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред
 procedure InitSyncObject; procedure PushSyncObject(handle: Cardinal); overload; procedure PushSyncObject(obj: TObject); overload; procedure PopSyncObject; implementation threadvar syncobj: Cardinal; synccnt: Cardinal; procedure InitSyncObject; begin syncobj := 0; synccnt := 0; end; procedure PushSyncObject(handle: Cardinal); begin if handle = 0 then raise EProgrammerNotFound.Create('   '); if (syncobj <> 0) and (handle <> syncobj) then raise EProgrammerNotFound.Create('       '); syncobj := handle; inc(synccnt); end; procedure PushSyncObject(obj: TObject); begin PushSyncObject(Cardinal(obj)); end; procedure PopSyncObject; begin if (syncobj = 0) or (synccnt = 0) then raise EProgrammerNotFound.Create('   '); Dec(synccnt); if synccnt = 0 then syncobj := 0; end; 

рдЬрдм рд╣рдо рдПрдХ рдирдпрд╛ рд╕реВрддреНрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо InitSyncObject рдХрд╣рддреЗ рд╣реИрдВред
рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, PushThreadObject рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, PopThreadObject рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ SyncObjs.pas рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХреЛрдб рдХреЛ рдПрдХ рдирдП рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, SyncObjsDbg.pas рдХрд╣рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реИ:
  TSynchroObject = class(TObject) public procedure Acquire; virtual; procedure Release; virtual; end; 

рдореЛрд▓-рддреЛрд▓ рдореЗрдВ PushSyncObject (Self), рдФрд░ рд░рд┐рд▓реАрдЬрд╝ рдкреЙрдкрд╕рдВрдХрдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, ThandleObject рдХреЗ рд╕рд╛рде рдЗрди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ WaitFor рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдлрд╝реНрд░реЗрдо рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рд╣рдо TThread.Synchronize рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЙрд▓ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо TThread рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЗрд╕реЗ (PopSyncObject) рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдо SendMessage API рдпрд╛ WaitFor рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЙрд▓ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рд╣реИрдВрдбрд▓ (PushSyncObject) рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ (PopSyncObject)ред
рдпрд╣ рд╕рдм рд╣реИ, рдЕрдм рдЬрдм рдЖрдк рджреВрд╕рд░реА рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдореЙрдбреНрдпреВрд▓ (SyncObjs / SyncObjsDbg) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдмреБрд░рд╛ рдХреЛрдб

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдмреБрд░рд╛ рдХреЛрдб рд▓реЗрдВ ... Class.pas рдореЙрдбреНрдпреВрд▓ рд╕реЗ TThreadList рд╡рд░реНрдЧ
  TThreadList = class private FList: TList; FLock: TRTLCriticalSection; FDuplicates: TDuplicates; public constructor Create; destructor Destroy; override; procedure Add(Item: Pointer); procedure Clear; function LockList: TList; procedure Remove(Item: Pointer); inline; procedure RemoveItem(Item: Pointer; Direction: TList.TDirection); procedure UnlockList; inline; property Duplicates: TDuplicates read FDuplicates write FDuplicates; end; 

рдпрд╣ рдПрдХ рдзрд╛рдЧрд╛-рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд░реНрдЧ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдмреБрд░рд╛ рд╣реИ? рд▓реЗрдХрд┐рди рдмреБрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ LockList рдФрд░ UnlockList рддрд░реАрдХреЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реЙрдХрд▓рд┐рд╕реНрдЯ рдФрд░ рдЕрдирд▓реЙрдХрд▓рд┐рд╕реНрдЯ рдХреЙрд▓ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рдмреАрдЪ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИ, рддреЛ рд╣рдо рдЙрдкрд░реЛрдХреНрдд рдирд┐рдпрдо рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд▓реЙрдХ / рдЕрдирд▓реЙрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡реИрд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП , Microsoft рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдПрдкреАрдЖрдИ рдЕрдХреНрд╕рд░ рдПрдирдо рдЗрдВрдЯрд░рдлреЗрд╕ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рд╡реЗ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдорд╛рддреНрд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХрд╛рдЙрдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╣реЗрдВ, рдФрд░ рдлрд┐рд░ рдЧреЗрдЯ рдЗрдЯреЗрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдореЗрдВ, рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рдФрд░ рд▓реЙрдХ / рдЕрдирд▓реЙрдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ, рддрд╛рдХрд┐ рдЬрдм рдЖрдк рд▓реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рддреЛ рдХреЛрдИ рднреА рд╕реВрдЪреА рдХреЛ рдмрджрд▓ рди рд╕рдХреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ рд▓реЙрдХ / рдЕрдирд▓реЙрдХ рдХреЗ рдмреАрдЪ рдПрдХ рдПрдкреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЧрддрд┐рд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╕рдм рдХреБрдЫ Enum рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдкрд░, рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЙрдирдХреА рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ Enum рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рддрдм рддрдХ рдирд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдХрдо рд╕реЗ рдХрдо Enum рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореМрдЬреВрдж рди рд╣реЛ, рдФрд░ рдЬрдм рдЖрдк Enum рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рд╕рднреА рдХреЗ рдкрд╛рд╕ рдЖрдВрддрд░рд┐рдХ рд╕реВрдЪреА рддрдХ рдкрд╣реБрдБрдЪ рд╣реЛ, рдФрд░ рдпрд╣ рд╕реВрдЪреА рдмрджрд▓ рднреА рд╕рдХрддреА рд╣реИред

рд╢рд╛рдпрдж рдХрд╛рдлреА рд╣реИ


рдореИрдВрдиреЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдмрдЯрди рджрдмрд╛рдпрд╛, рдкрд░рд┐рдгрд╛рдореА рдорд╛рддреНрд░рд╛ рджреЗрдЦреА, рдФрд░ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдЕрднреА рдХреЗ рд▓рд┐рдП, рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЯреАрдереНрд░реЗрдб рдбреЗрд▓реНрдлреА рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдФрд░ рдЙрди рдирд┐рдпрдореЛрдВ рдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдЬреЛ рдореИрдВ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдмрдирд╛рддреЗ рдФрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХрд░рддрд╛ рд╣реВрдВред

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


All Articles