рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдкреНрд░рдмрдВрдзрди: рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдЪреИрдирд▓

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ:

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

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ, рдирдХрд▓ рд░реЛрдХрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде рдЙрдкрдпреБрдХреНрдд рд╕рдВрд╡рд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЗрддрдиреА рд╕рд░рд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЛрдИ рдХреИрд╕реЗ рдЧрд▓рддреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдХрдИ рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди


рдЬрдм рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдзрд╛рдЧрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рддреЛ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреА рд╕рдорд╕реНрдпрд╛ рддреБрд░рдВрдд рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдзрд╛рд░рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдФрд░ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рддреЛ рд╣рдореЗрд╢рд╛ рдзрд╛рд░рд╛ рдХреЗ рд╕рд╣реА рдард╣рд░рд╛рд╡ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рдереНрд░реЗрдбреНрд╕ рдкрд░ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЖрд╡рд░рдг рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдЧрд▓рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╣реА рддрд░реАрдХреЗ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо WinAPI рд╕реНрддрд░ рдкрд░ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред

рдЗрдВрдЬрди рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ GUI рдереНрд░реЗрдб рдХреЛ рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдЬрд╛ рд░рд╣реА рд╣реИ), рд░реБрдХрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ, рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рднреА рдЖрд░рдВрдн рдХрд░реЗрдВред

рджреЛ рдореБрдЦреНрдп рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИрдВред


рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдзрд┐ - рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдереНрд░реЗрдб рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рдВрджреЗрд╢реЛрдВ (PostMessage) рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдРрд╕рд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдзрд╛рд░рд╛, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдФрд░ рдЕрдкрдирд╛ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦрддреА рд╣реИред
рдФрд░ рдЕрдЧрд░ рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рддреЛ рдереНрд░реЗрдб GUI рд╕реЗ рдХрдВрдЯреНрд░реЛрд▓ рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдзрд┐ - рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕рдордХрд╛рд▓рд┐рдХ рдХреЙрд▓ (SendMessage) рдХреА рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЙрд▓ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рд╡рд┐рдзрд┐ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдордп рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реВрддреНрд░, рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╣реИред рдЕрддреНрдпрдзрд┐рдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдкрдиреЗ рдлрд╛рдпрджреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдореБрдЦреНрдп рд▓рд╛рдн рд╕рд╛рджрдЧреА рд╣реИред

рдиреБрдХрд╕рд╛рди: SendMessage + рд╕реНрдЯреНрд░реАрдо рд░реЛрдХреЗрдВ


рдЬрдм рдореИрдВ рдПрдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рджреЗрдЦрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рддреБрд░рдВрдд рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ GUI рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рд░реЛрдХрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

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

// INFINITE ,  -       ,     WaitForSingleObject(hThread, INFINITE); 

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

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

рджреВрд╕рд░реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕реАрдзреЗ GUI рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдкреВрд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╕реНрдорд┐рдпрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди


рдЗрдВрдЬрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЕрдВрджрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

COM рд╕рд┐рдВрдЧрд▓-рдереНрд░реЗрдбреЗрдб рдЕрдкрд╛рд░реНрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрдВрдЬрди рд╕реЗ рд╕рднреА рд╕реВрдЪрдирд╛рдПрдВ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдиреА рдЪрд╛рд╣рд┐рдПред

рдХреЙрд▓ рд╕рдордХрд╛рд▓рд┐рдХ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП: рд╡рд░реНрдХрд░ рдереНрд░реЗрдб рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЬреАрдпреВрдЖрдИ рдереНрд░реЗрдб рдЗрд╕ рдХреЙрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рдордп рднреАред

рдирддреАрдЬрддрди, рдЬреАрдпреВрдЖрдИ рдХреЗ рд▓рд┐рдП рдЗрдВрдЬрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рд╣реЛрдЧрд╛, рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░реЗрдЧрд╛ред

C ++ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рднрд┐рдиреНрди рд░реВрдк


рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╡рд╕реНрддреБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ GUI рдХреЛрдб рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред

рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрд╣рд╛ - рдПрдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдЪреИрдирд▓ред

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

рдЪреИрдирд▓ рдореЗрдВ рдПрдХ рдПрдХреНрд╕реЗрдХреНрдпреВрдЯ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдмрдврд╝рд╛рд╡рд╛ :: рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк рдмреВрд╕реНрдЯ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдлрд╝рдВрдХреНрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :: рдмрд╛рдЗрдВрдбред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕ рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рд╕реА рднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 class IEngineEvents { public: virtual void OnProgress(int progress) = 0; ... }; //-  ... IEngineEvents* listener; //  ,  GUI syncChannel.Execute(boost::bind(&IEngineEvents::OnProgress, listener, 30)); 

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

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

рдереНрд░реЗрдб рд╕рдВрджрд░реНрдн рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдорд╛рдирдХ Win32 рдереНрд░реЗрдб рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдФрд░ PostThreadMessage рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

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

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

рдореИрдВ рдпрд╣ рднреА рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗрд╡рд▓ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдПрдХ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред
 // SyncChannel.h class CSyncChannel { public: typedef boost::function<void()> CCallback; public: CSyncChannel(void); ~CSyncChannel(void); public: bool Create(DWORD clientThreadId); void Close(); bool Execute(CCallback callback); bool ProcessMessage(MSG msg); private: DWORD m_clientThreadId; CCallback m_callback; HANDLE m_deliveredEvent; volatile bool m_closeFlag; }; 

 // SyncChannel.cpp UINT WM_SYNC_CHANNEL_COMMAND = WM_APP + 500; CSyncChannel::CSyncChannel(void) : m_closeFlag(true) {} CSyncChannel::~CSyncChannel(void) {} bool CSyncChannel::Create(DWORD clientThreadId) { if (!m_closeFlag) { return false; } m_clientThreadId = clientThreadId; m_deliveredEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (!m_deliveredEvent) { return false; } m_closeFlag = false; return true; } void CSyncChannel::Close() { m_closeFlag = true; if (m_deliveredEvent) { CloseHandle(m_deliveredEvent); m_deliveredEvent = NULL; } } bool CSyncChannel::Execute(CCallback callback) { //        . //   ,        . //   Pause(),     // -    , //        "pause pending" if (m_closeFlag) { return false; } if (GetCurrentThreadId() == m_clientThreadId) { //    -   , //      ,    . //      ,        , //       -     . callback(); } else { //  Execute     , //        , //        . //      , //       . //      ,   , //      , //     . m_callback = callback; //     ,    //      ,     ResetEvent(m_deliveredEvent); //     ,   //    . //       ,  , //       CSyncChannel::ProcessMessage() if (!PostThreadMessage(m_clientThreadId, WM_SYNC_CHANNEL_COMMAND, NULL, NULL)) { return false; } // ,      CSyncChannel::ProcessMessage(), //     m_deliveredEvent, //       m_closeFlag //    m_closeFlag    //   WaitForMultipleObjects,      , //       . DWORD waitResult = WAIT_TIMEOUT; while (waitResult == WAIT_TIMEOUT && !m_closeFlag) { waitResult = WaitForSingleObject(m_deliveredEvent, 100); } if (waitResult != WAIT_OBJECT_0) { //      ,       return false; } } //          return true; } bool CSyncChannel::ProcessMessage(MSG msg) { //        if (msg.message != WM_SYNC_CHANNEL_COMMAND) { //         , //     return false; } if (!m_closeFlag) { //      , //         m_callback(); //   ,   . //       SetEvent(m_deliveredEvent); } return true; } 

CSyncChannel рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдЖрд▓реЗрдЦ рджреЗрдЦреЗрдВ - рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рдЖрдпреЛрдЬрди: рдЗрдВрдЬрди рд░рд╛рдЬреНрдп рдХрд╛ рдкреНрд░рдмрдВрдзрди ред

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


All Articles