рдЯрд┐рдмреНрдмрд╛ 2: рдПрдХ рд░рд╛рдЬрд╡рдВрд╢ рдХреА рдЗрдорд╛рд░рдд

рдбреЗрд╡рд▓рдкрд░: рд╡реЗрд╕реНрдЯрд╡реБрдб рд╕реНрдЯреВрдбрд┐рдпреЛ
рдкреНрд░рдХрд╛рд╢рдХ: рд╡рд░реНрдЬрд┐рди рдЧреЗрдореНрд╕
рд╢реИрд▓реА: рд░рдгрдиреАрддрд┐ (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп) / рдЯреЙрдк-рдбрд╛рдЙрди
рд╕рд┐рд╕реНрдЯрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ:
рдордзреНрдпрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп


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

рдХреЛрдб рдЖрдзрд╛рд░


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

рддреЛ, рд╕реВрдЦреЗ рддрдереНрдп:

рднрд╛рд╖рд╛: рд╕реА
рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛: 143
рдХреЛрдб рдХреА рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛: 59151
рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░: 423.2 Kb
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдордХрдХреНрд╖ рдЖрдХрд╛рд░: ~ 1000 Kb
рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╕рдордп: ~ 2 рдорд╣реАрдиреЗ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдмрд╛рдж рдореЗрдВ, рдореИрдВ рдЙрди рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдерд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ "рдЬреНрдЮрд╛рдд рд╕рдорд╕реНрдпрд╛рдУрдВ" рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЙрдкрдзрд╛рд░рд╛ рдХреЛ рдХрдо рдХрд░реЗрдВред

рдорд▓реНрдЯреАрд╕реНрдкреНрд░реЗрдбрд┐рдВрдЧ рд╡реАрдПрд╕ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕реА


рдУрдкрдирдбреНрдпреВрди рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЗрдВрдЯрд░рдкреНрдЯ-рдЖрдзрд╛рд░рд┐рдд рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдореЙрдбрд▓ рд╣реИред рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдВрддрд╣реАрди рдЪрдХреНрд░реЛрдВ рдореЗрдВ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕реНрдкрд┐рди рдХреЗ рд╕рдордп рдХрд╛ рдЧреЗрдо рдХреЛрдб, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

while (true) { uint16 key; key = GUI_Widget_HandleEvents(w); if (key = 13) { break; } sleepIdle(); } 


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

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

рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдгред рдпрд╣рд╛рдБ рдПрдХ рдорд╕реМрджрд╛ рдХреЛрдб рд╣реИ рдЬреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ:

 void someProblemFunction() { { //open 1 } while (true) { // open 2 while (true) { // code 2 } // close 2 } { //close 2 } } 


рд╕рдЯреНрдЯрд╛ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдмрд╛рдж, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб:

 void asyncSomeProblemFunction() { Async_InvokeInLoop( asyncSomeProblemFunctionOpen1, asyncSomeProblemFunctionCondition1, asyncSomeProblemFunctionLoop1, asyncSomeProblemFunctionClose1); } void asyncSomeProblemFunctionOpen1() { // code from open 1 } void asyncSomeProblemFunctionCondition1() { // code from loop 1 condition } void asyncSomeProblemFunctionLoop1() { Async_InvokeInLoop( asyncSomeProblemFunctionOpen2, asyncSomeProblemFunctionCondition2, asyncSomeProblemFunctionLoop2, asyncSomeProblemFunctionClose2); } void asyncSomeProblemFunctionClose1() { // code from close 1 } 


рд╣реАрди рдХрд╛рд░реНрдпред рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдореВрд▓ Async_InvokeInLoop рдлрд╝рдВрдХреНрд╢рди рд╣реИред

 void Async_InvokeInLoop( void (*open)(), void (*condition)(bool* ref), void (*loop)(), void (*close)()); 


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

 void Async_Loop() { ScheduledAsync *top = STACK_TOP; switch (top->state) { case ScheduledAsync_OPEN: { top->open(); top->state = ScheduledAsync_CONDITION; return; } case ScheduledAsync_CONDITION: { top->condition(&top->conditionValue); top->state = ScheduledAsync_LOOP; return; } case ScheduledAsync_LOOP: { if (top->conditionValue) { top->loop(); top->state = ScheduledAsync_CONDITION; } else { top->state = ScheduledAsync_CLOSE; } return; } case ScheduledAsync_CLOSE: { popStack(); top->close(); free(top); return; } default: abort(); } } 


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

 /* * async.h * * Created on: 19.10.2012 * Author: caiiiycuk */ #ifndef ASYNC_H_ #define ASYNC_H_ #include "types.h" extern void async_noop(); extern void async_false(bool *condition); extern void async_true(bool *condition); extern void Async_InvokeInLoop(void (*open)(), void (*condition)(bool* ref), void (*loop)(), void (*close)()); extern bool Async_IsPending(); extern void Async_Loop(); extern void Async_InvokeAfterAsync(void (*callback)()); extern void Async_InvokeAfterAsyncOrNow(void (*callback)()); extern void Async_Storage_uint16(uint16* storage); extern void Async_StorageSet_uint16(uint16 value); #endif /* ASYNC_H_ */ 


рдЦреЗрд▓ рдХрд╛ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рдХреГрддрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЗрдВ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реБрдЖ, рдЬрд┐рд╕рдиреЗ рдХрдИ рдордЬреЗрджрд╛рд░ рдмрдЧреЛрдВ рдХреЛ рдорд╛рд░рд╛:


рдЬреНрдЮрд╛рдд рдореБрджреНрджреЗ


рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдкрд░реАрдХреНрд╖рдХреЛрдВ рдХреЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдореЗрдВ рдореЗрд░реЗ рдФрд░ рдореЗрд░реЗ рдХрд╛рд▓реНрдкрдирд┐рдХ рдорд┐рддреНрд░ рд╣реИрдВ, рд╣рдо рд╕рд┐рд░реНрдл рдЬрд╛рдирддреЗ рд╣реИрдВ:

рдмрд╛рдХреА рд╕рдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЯреНрд░реИрдХрд░: https://github.com/caiiiycuk/play-dune

рдХреНрдпрд╛ рд╣рдо рдЦреЗрд▓ рд░рд╣реЗ рд╣реИрдВ?


http://play-dune.com/

71

UPD1ред рд╣реЙрдЯ рдХреАрдЬрд╝: habrahabr.ru/post/159501/#comment_5516325

UPD2ред рд╕рд░реНрд╡рд░ рдкреВрдЫрддрд╛ рд╣реИ, рдореИрдВ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рд▓рд┐рдВрдХ рджреЗрддрд╛ рд╣реВрдВ:
Atreides рд╣реЛрдо рдХреЗ рд▓рд┐рдП рдЦреЗрд▓реЛ
рдСрд░реНрдбреЛрд╕ рд╣рд╛рдЙрд╕ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓рддреЗ рд╣реИрдВ
рд╣рд░рдХреЛрди рд╣рд╛рдЙрд╕ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓рддреЗ рд╣реИрдВ

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

UPD4ред рдлрд┐рд░ рднреА, рд╕рдорд╕реНрдпрд╛ рдореЗрд░реЗ рдХреБрдЯрд┐рд▓ рд╣рд╛рдереЛрдВ рдореЗрдВ рдереА, рдЕрдм рд╕рд░реНрд╡рд░ рдХреЛ рд▓реЛрдб рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

UPD6ред рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд▓ред

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


All Articles