рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╡реИрд╕реЗ рднреА рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рднреА рдЕрдзрд┐рдХ рд╕реАрдорд┐рдд рд╣реИрдВ, рдЕрдХреНрд╕рд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдУрдПрд╕ рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛, рдирдВрдЧреЗ рдзрд╛рддреБ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
C рдореЗрдВ рдХреЛрд░рдЖрдЙрдЯ, рдЬрдирд░реЗрдЯрд░, рд╕рд╣рдХрд╛рд░реА рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЕрдХреНрд╕рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕рд░рд▓ рдХрд░ рд╕рдХрддреА рд╣реИ рдФрд░ рд╢рдХреНрддрд┐ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдХрдИ рд▓реЛрдЧ рдЗрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред
рдирд┐рд░рдВрддрд░рддрд╛ (рд╡рд┐рдЪрд▓рди) рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдЯреНрд░реАрдо (рдлрд╝рдВрдХреНрд╢рди) рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рд▓реМрдЯрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо
рдХреЛрд░рдЖрдЙрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд▓рдЧрднрдЧ рддреИрдпрд╛рд░
рдЬрдирд░реЗрдЯрд░ ,
рдкреБрдирд░рд╛рд╡реГрддреНрдд рдФрд░
рд╕рд╣рдХрд╛рд░реА рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рд╣реИрдВ ред
рд╕реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рд╕реИрдВрдкрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
- рдЕрд╕реЗрдВрдмрд▓рд░ рдЖрд╡реЗрд╖рдг (рдХреЛрд░реЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдЯреИрдХ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛, рдпрд╛ рдЧреЗрдЯрдХреЙрдиреНрдХреНрд╕реНрдЯ / рд╕реЗрдЯрдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╕рдВрджрд░реНрдн рдХреЛ рдмрдЪрд╛рдиреЗ / рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдпрд╛ рд╕реЗрдЯрдЬрдореНрдк / рд▓реЙрдиреНрдЧрдЬрдореНрдк рд╕реНрдЯреИрдХ (рд▓рд┐рдмрд╕реНрдкреНрд▓, рд▓рд┐рдмреЛрд░рдХрд╛рдЙрдВрдЯрд░, рд▓рд┐рдмреЗрдВрдХреЛрд░реНрдЗрдЬ, рд▓рд┐рдмреЛрд░реЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдХреЛ рдмрдЪрд╛рдиреЗ / рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреЙрд╕рд┐рдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
- рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рдЙрдкрдпреЛрдЧ (рдЬрд┐рд╕реЗ "рдбрдл рдбрд┐рд╡рд╛рдЗрд╕" рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЯреЛрдереНрд░реЗрдбреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА ( рдПрдбрдо рдбрдВрдХрд▓реНрд╕ рд╕реЗ рдХреИрдиреЛрдирд┐рдХрд▓ рд╕рдВрд╕реНрдХрд░рдг , рдФрд░ рд▓реИрд░реА рд░реБрдПрди рд╕реЗ рдЗрд╕рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рдордХрдХреНрд╖ ), PuTTY рдХреЗ рд▓реЗрдЦрдХ рд╕рд╛рдЗрдорди рдЯрд╛рдердо рд╕реЗ рдХреЛрд░рд╛рдЙрдЯрд╛рдЗрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА ред
- рдЬреАрд╕реАрд╕реА рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕ "рдЯреИрдЧ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕", (рдкреНрд░реЛрдЯреЙрдереНрд░реЗрдбреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА)ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдбрдо рдбрдВрдХрд▓ рдХреЗ
рдкреНрд░реЛрдЯреЛрдереНрд░реЗрдбреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВред рдпрд╣ рд╕рд░рд▓ рдФрд░ рдиреНрдпреВрдирддрд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ, C ++ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ, рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдФрд░ рд╕рдВрдХрд▓рдХ рдкрд░ рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИред рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреАрд╕реАрд╕реА рд╣реИ, рддреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЪрд░ рд▓реЗрдмрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореБрдЭреЗ рдПрдореНрдмреЗрдбреЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧрддрд╛ рдерд╛, рдЬрд╣рд╛рдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░, рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╣реИрдВред
рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВ рдХреЗрд╡рд▓ рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред рдмреЗрд╢рдХ, рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ "рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░" рд╣реИ рдФрд░ рдпрд╣ рд╕рдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд╛рда рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рд░реИрдЦрд┐рдХрддрд╛, рд╕реНрдкрд╖реНрдЯрддрд╛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рджрд░реНрдЬрди рдпрд╛ рдЕрдзрд┐рдХ рд░рд╛рдЬреНрдп рд╣реИрдВ, рддреЛ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЯреЙрдереНрд░реЗрдб рдЖрдкрдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИред рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдкреНрд░реЛрдЯреЛрдереНрд░реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рд┐рдЦреЗ рдЧрдП рд╕рдордХрдХреНрд╖ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 20 рд╕реЗ 50% рдХрдо рд╣реИред
рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рд▓рд┐рдЦреЗ рдЧрдП рдереЗ, рд╡реЗ рдорд┐рдирдЧрд╡ рдФрд░ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рджреЗрдВ!
Visual Studio рдореЗрдВ, DEBUG рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рдкреНрд░реЛрдЯреЙрдереНрд░реЗрдбреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИ, рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реИ!рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╡реАрдПрд╕ рдореЗрдВ рдбрд┐рдмрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ __LINE__ рдореИрдХреНрд░реЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд▓рд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ lc-switch.h рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
#define LC_SET(s) s = __LINE__; case __LINE__:
рдкрд░
#define LC_SET(s) s = __COUNTER__+1; case (__COUNTER__):
рдЬреАрд╕реАрд╕реА рдореЗрдВ, рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рддрд╣рдд, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрд┐рдирд╛ рдмрджрд▓рд╛рд╡ рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ .h рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЕрдирдЬрд╝рд┐рдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╣реЗрдбрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
#include "pt.h"
рддреЛ рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдХреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЕрдЧрд▓реА рдХрдбрд╝рд┐рдпреЛрдВ
рдЦреБрдж рдХреЛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╣реИрдВред
рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╡рд╛рд▓рд╛ рдПрдХ рдХрд╛рд░реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
int name(struct pt *pt [, ])
рдпрд╛ рдЗрд╕ рддрд░рд╣ рдПрдХ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░:
PT_THREAD(name(struct pt *pt [, ]))
рдкреАрдЯреА рддрд░реНрдХ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ, рдЬреЛ рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рдмрд╛рдзрд┐рдд рдерд╛ред
рдлрд╝рдВрдХреНрд╢рди рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдХрдердиреЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдореИрдХреНрд░реЛ
PT_BEGIN (pt) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП -
PT_END (pt) ред рдпрджрд┐ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдореИрдХреНрд░реЛ
PT_BEGIN (pt) рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдорд░, рдХрд╛рдЙрдВрдЯрд░ рдЖрджрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ред
PT_YIELD (pt) рдХрдорд╛рдВрдб рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд▓реА рдмрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░, рдлрд╝рдВрдХреНрд╢рди рдЕрдЧрд▓реЗ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕реЗ рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИред
рд╕реНрдЯреНрд░реАрдо рдХрд╛ рд╡реНрдпрд╡рдзрд╛рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рдореИрдХреНрд░реЛ
PT_EXIT (pt) рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдВрдд рддрдХ рдпрд╛ рд░реБрдХрд╛рд╡рдЯ рдХреЗ рдмрд╛рдж (рдореИрдХреНрд░реЛрдЬрд╝
PT_END (pt) рдФрд░
PT_EXIT (pt) рдХреЗ рдмрд╛рдж ,
PT_RESTART (pt) рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рд╢реБрд░реБрдЖрдд рдореЗрдВ "рд░реАрд╡рд╛рдЙрдВрдб" рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд▓реЗ рдХреЙрд▓ рдкрд░ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред
рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд░реБрдХрд╛рд╡рдЯ рджреЗрддрд╛ рд╣реИ - рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реБрдХрд╛рд╡рдЯ рдХрд╛ рдХрд╛рд░рдг:
PT_WAITING - рдПрдХ рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ,
PT_YIELDED - рдорд╛рди
рд▓реМрдЯрд╛рддрд╛ рд╣реИ ,
PT_EXITED -
PT_EXIT (pt) рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ,
PT_ENDED - рдлрд╝рдВрдХреНрд╢рди
PT_END (pt) рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реИред
рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ
PT_INIT (pt) рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЪрд░ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдЕрдкрдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд┐рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬрдирд░реЗрдЯрд░
рдЬрдм рдЖрдкрдХреЛ рдПрдХ рдЬрдЯрд┐рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рдХреБрдЫ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдФрд░ рдкрд┐рдЫрд▓реЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рддреЛ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
#include "pt.h" #include <stdio.h> static int fib(struct pt *pt, int max, int* res) { static int a,b; PT_BEGIN(pt); a=0;b=1; while (a<max) { *res=a; PT_YIELD(pt); b+=a; a=ba; } PT_END(pt); } int main(void) { int value; struct pt pt1; PT_INIT(&pt1); while( fib(&pt1, 1000, &value) < PT_EXITED ){ printf("Value %d\n",value); } return 0; }
coroutine
рд╢рд╛рд╕реНрддреНрд░реАрдп рдХреЛрд░рдЖрдЙрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдереНрд░реЗрдб рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрдВрдЯрд░рдкреНрдЯ рд▓реЛрдХреЗрд╢рди рдкрд░ рд▓реМрдЯ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреНрд░рд╡рд╛рд╣ (рдлрд╝рдВрдХреНрд╢рди) рдХреЗ рдмреАрдЪ рдХреЙрд░рдЯрд╛рдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ "рдж рдЖрд░реНрдЯ рдСрдлрд╝ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рдкреБрд╕реНрддрдХ рдХрд╛ рдЙрдкрдкреНрд░реЛрдЧреНрд░рд╛рдо (рд╡реЙрд▓реНрдпреВрдо, рд╡реЙрд▓реНрдпреВрдо I) рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдХреБрдЫ рд╣рд┐рд╕реНрд╕рд╛ рдХрд┐рд╕реА рддрд░рд╣ рдбреЗрдЯрд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрд┐рд╕реА рддрд░рд╣ рдЙрдирдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдкрднреЛрдХреНрддрд╛ рдФрд░ рдирд┐рд░реНрдорд╛рддрд╛ рджреЛрдиреЛрдВ рд╣реА рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИрдВред рдЬрдм рдЖрдк рдбреЗрдЯрд╛ рдкреНрд░реЛрдбреНрдпреВрд╕рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдбреЗрдЯрд╛ рдЦрдкрдд рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдХрд┐рд╕реА рдбреЗрдЯрд╛ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрднреЛрдХреНрддрд╛ рдХреЛ рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЬреЗрдирд░реЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдо-рд╕рдмрдкреНрд░реЛрдЧреНрд░рд╛рдо рд░рд┐рд╢реНрддреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреЛрд░рдЯрд╛рдЗрди-рдХреЛрд░рдЯрд╛рдЗрди рд╕рдВрдмрдВрдз рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЖрдк рдЕрднреА рднреА рдкрд╣рд▓реЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рддреБрд░рдВрдд рдЙрди рд╕рднреА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрдореЛрд░реА рд╕реЗ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдПред рдХреЙрд░рдЯреАрди рдХреЛ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рднреА рдЖрд╕рд╛рди рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ xml рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрд╕реЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░реЗрдВ, рдлрд┐рд░ рдЙрд╕реЗ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдкреАрдврд╝реА рдФрд░ рднрдВрдбрд╛рд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдореГрддрд┐ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рднреА рдЫреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИрдВред makeXmlLine рд╣рдорд╛рд░реЗ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рд╡рд╛рдХреНрдп рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдПрдХ XML рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред writeXmlLine рдПрдХ рдЙрдкрднреЛрдХреНрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдпрд╣ рд▓рд╛рдЗрди рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрдЪрд╛рддрд╛ рд╣реИред рдЬрдм рддрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреА
рдХреЙрд░рдЯреАрди рдЦрддреНрдо рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреА (рдкрд░рд┐рдгрд╛рдо
PT_EXITED рд▓реМрдЯрд╛рддрд╛ рд╣реИ ) рддрдм рддрдХ
рдХреЛрд░рдЖрдЙрдЯ рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
#include "pt.h" #include <stdio.h> #include <string.h> #include <malloc.h> static int makeXmlLine(struct pt *pt, char* dst, char* src) { static char* text; // static char * pch; PT_BEGIN(pt); strcpy(dst,"<?xml version=\"1.0\" encoding=\"Windows-1251\"?>"); PT_YIELD(pt); strcpy(dst,"<text>"); PT_YIELD(pt); text=strdup(src); // strtok , pch = strtok (text," ,.!?:"); while (pch != NULL){ sprintf(dst," <word>%s</word>",pch); PT_YIELD(pt); pch = strtok (NULL, " ,.!?:"); } strcpy(dst,"</text>"); PT_YIELD(pt); *dst=0; // , PT_YIELD(pt); free(text); PT_END(pt); } static int writeXmlLine(struct pt *pt, char* fileName, char* str) { static FILE* file; PT_BEGIN(pt); file=fopen(fileName,"w"); // while(*str){ fprintf(file,"%s\n",str); PT_YIELD(pt); } fclose(file); PT_END(pt); } int main(void) { struct pt pt1,pt2; char xmlString[128]; PT_INIT(&pt1); PT_INIT(&pt2); // , while (makeXmlLine(&pt1,xmlString, "Hello, world! Pleased to meet you!") < PT_EXITED) writeXmlLine(&pt2,"file.xml",xmlString); return 0; }
рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ
рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдбреЗрдЯрд╛ рдкреЛрд░реНрдЯ рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ, рдмрдлрд░ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ, рдЯрд╛рдЗрдорд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ, рдПрдХ рдФрд░ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рдХрд░рдиреЗ, рдмрдЯрди рджрдмрд╛рдиреЗ, рд░реБрдХрдиреЗ, рдЖрджрд┐ред рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЙрдбрд▓ рд╕реЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрдЪрд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВ рдпрд╣ рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рд╕рд╣рдХрд╛рд░рд┐рддрд╛ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдзрд╛рдЧрд╛ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд╕рд╛рде рдХреЛрд░рдЯрд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбрд┐рд╕реНрдкреИрдЪрд░ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рд╣реИ рдЬреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрд░рдЯрд╛рдЗрди рдХрд╣рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░реЗрд╖рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рд╣рдЯрд╛рдиреЗ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдЖрджрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЛрд░рдЯрд╛рдЗрди-рдЖрдзрд╛рд░рд┐рдд рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реАрдореЗрдкреНрдЯрд┐рд╡ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рд╕рднреА рдСрдкрд░реЗрд╢рди рдкрд░рдорд╛рдгреБ рд╣реИрдВ; рдбреЗрдЯрд╛ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдбреЛрдВ рдФрд░ рдореНрдпреВрдЯреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕реНрдЯреНрд░реАрдо рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡реНрд╕ рдпрд╛ рддреЛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рддрддреНрд╡ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкреВрд░реА рддрд░рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ
- рдХрдо рдкреНрд░рд╡рд╛рд╣ рдУрд╡рд░рд╣реЗрдбред рдкреНрд░рддрд┐ рд╕реНрдЯреНрд░реАрдо рдореЗрдореЛрд░реА рдЦрдкрдд рджреЛ рдмрд╛рдЗрдЯреНрд╕ рддрдХ рд╕реАрдорд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рд░рд┐рдЯрд░реНрди рдкреЙрдЗрдВрдЯ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддреА рд╣реИ; рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЕрдкрдирд╛ рд╕реНрдЯреИрдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдереНрд░реЗрдб рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдпреВрдЬрд░ рд╕реНрдкреЗрд╕ рдореЗрдВ рд░реАрдб рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд░реНрджреЗрд╢ рдмрдирддреЗ рд╣реИрдВред рддреЛ рдзрд╛рдЧреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓рд╛рдЦреЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ
- рдЖрдк рдХрдИ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╣реЛрдиреЗ рддрдХ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рдИрд╡реЗрдВрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛: рдПрдХ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рдЖ рдЧрдпрд╛, рдпрд╛ рдПрдХ рдЯрд╛рдЗрдорд░ рдХрд╛рдо рдХрд░ рдЧрдпрд╛, рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдСрдкрд░реЗрд╢рди рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛, рдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ
- рдПрдХ рдЕрд╡рд░реБрджреНрдз рдзрд╛рдЧреЗ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдорд╛рдирдХ рдЕрд╡рд░реБрджреНрдз рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЯреЛрдереНрд░реЗрдбреНрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рдореИрдХреНрд░реЛрдЬрд╝ PT_WAIT_UNTIL рдФрд░ PT_WAIT_WH рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдирд╛ рдХреЗ рд╣реЛрдиреЗ рддрдХ рдПрдХ рдереНрд░реЗрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
- рдореИрдХреНрд░реЛ PT_WAIT_THREAD , рдереНрд░реЗрдб рдХреЛ рддрдм рддрдХ рд░реЛрдХреЗрдВ рдЬрдм рддрдХ рджреВрд╕рд░рд╛ рдереНрд░реЗрдб рд╕рдорд╛рдкреНрдд рди рд╣реЛ рдЬрд╛рдП
- рдореИрдХреНрд░реЛ PT_SPAWN рдПрдХ рдзрд╛рдЧреЗ рдХреЛ рд╢реБрд░реБрдЖрдд рд╕реЗ рдПрдХ рдФрд░ рдзрд╛рдЧрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЦрддреНрдо рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ
- рдореИрдХреНрд░реЛ PT_SCHEDULE , рдПрдХ рдЖрджрд┐рдо рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рдмрдВрдзрдХ, рдЕрдЧрд▓реЗ coroutine рдЪрд░рдг рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ
- рд╕рдВрд░рдЪрдирд╛ pt_sem , PT_SEM_INIT , PT_SEM_WAIT , PT_SEM_SIGNAL - рд╕реЗрдорд╛рдлреЛрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд┐рдо рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдмреЗрдХрд╛рд░ рд╣реИрдВ
рдпрджрд┐ рдЖрдк рдХрдИ рд╕рдорд╛рди рд╕реНрдЯреНрд░реАрдо рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдЯреНрд░реАрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд▓рд┐рдВрдХ рдкрд╛рд╕ рдХрд░реЗрдВ, рдЬреЛ рд╕рднреА рдбреЗрдЯрд╛ рдФрд░ рдЪрд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЕрдкрдиреА рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕реВрддреНрд░ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдЪрд░ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯреЗрдЯрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреИрдЯрд┐рдХ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ рдПрдХ рдлрдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдХрдВрд╕реЛрд▓ рдЕрд░реНрдХрд╛рдиреЙрдЗрдб рдмрдирд╛рдПрдВ (100 рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ)ред рдкрд╛рд╕реНрдЯрдмрд┐рди рдкрд░ рдлрд╝рд╛рдЗрд▓:
arkanoid.cрд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рдзрд╛рд░рд╛рдПрдБ рд╣реЛрдВрдЧреА: рд░реИрдХреЗрдЯ, рдЧреЗрдВрдж рдФрд░ рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рдиред рдПрдХ рдФрд░ рд╕рд╣рд╛рдпрдХ рдЙрдкрд╡рд╛рдХреНрдп рд╡рд┐рд░рд╛рдо рджреЗрдЧрд╛ред
рд╢реЗрдбреНрдпреВрд▓рд░ рд╕рд░рд▓ рд╣реЛрдЧрд╛: рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд╛рд╣ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ 10ms рдХрд╛ рдард╣рд░рд╛рд╡ред рдпрджрд┐ рдХреЛрдИ рдкреНрд░рд╡рд╛рд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЦреЗрд▓ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рдЧреЗрдВрдж рдореИрджрд╛рди рд╕реЗ рдмрд╛рд╣рд░ рдЙрдбрд╝ рд╕рдХрддреА рд╣реИ, рдпрд╛ рд╣рдо рд╕рднреА рдИрдВрдЯреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ)ред
while (PT_SCHEDULE(printField(&fieldPt)) && PT_SCHEDULE(controlThr(&ctrlPt)) && PT_SCHEDULE(ballThread(&ballPt))) Sleep(10);
PrintField рд╕реНрдЯреНрд░реАрдо рдкрд╣рд▓реЗ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рдЧреЗрдо рдлрд╝реАрд▓реНрдб рдмрдирд╛рддрд╛ рд╣реИ, рдлрд┐рд░, рдПрдХ рд▓реВрдк рдореЗрдВ, рдпрд╣ рдлрд╝реАрд▓реНрдб рдкрд░рд┐рд╡рд░реНрддрди рдзреНрд╡рдЬ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕рдВрдкреВрд░реНрдг рдлрд╝реАрд▓реНрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рдИрдВрдЯреЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдкреНрд░рд╡рд╛рд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
ControlThr рд╕реНрдЯреНрд░реАрдо рдлрд╝реАрд▓реНрдб рдкрд░ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЦреАрдВрдЪрддреА рд╣реИ, рдПрдХ рдмрдЯрди рдХреЛ рджрдмрд╛рдП рдЬрд╛рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд┐рдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╛ "рдХреНрд╖" рджрдмрд╛рдХрд░ рдЦреЗрд▓ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдкреЙрдЬрд╝рдереНрд░реЗрдб рдереНрд░реЗрдб рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдард╣рд░рд╛рд╡ рд░рдЦрддрд╛ рд╣реИ, рдЬреЛ
PT_SPAWN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрд╛рд░реНрдп рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдмреЙрд▓рдЯреНрд░реЗрдб рдереНрд░реЗрдб рдЧреЗрдВрдж рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЧрддрд┐ рд╕реЗ рдкреВрд░реЗ рдореИрджрд╛рди рдореЗрдВ рдШреБрдорд╛рддрд╛ рд╣реИ, рдИрдВрдЯреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рджреАрд╡рд╛рд░реЛрдВ рдФрд░ рдЪрдордЧрд╛рджрдбрд╝реЛрдВ рдХреЛ рдЙрдЫрд╛рд▓ рджреЗрддрд╛ рд╣реИред рдЧреЗрдВрдж рдХреЗ рдореИрджрд╛рди рд╕реЗ рдмрд╛рд╣рд░ рдЙрдбрд╝рдиреЗ рдкрд░ рдпрд╣ рдкреНрд░рд╡рд╛рд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
рдХреБрдЫ рдФрд░ рд╕реБрдЭрд╛рд╡:рдпрджрд┐ рдЖрдк gcc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ #define рдбрд╛рд▓рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ:
#define LC_INCLUDE "lc-addrlabels.h" #include "pt.h"
рдпрд╣ рдЖрдкрдХреЛ рдорд╛рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ gcc рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдмрд╛рдзрд┐рдд рдФрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрд╡рдпрдВ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗ, рд╡реЗ рдЖрдкрдХреЗ рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдорд┐рд▓реЗрдВрдЧреЗред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдзрд╛рд░рд╛ рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
SCHEDULE рд░рд┐рдЯрд░реНрди 0 рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдЗрд╕реЗ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд▓реЙрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
PT_WAIT_WHILE (pt, 1)