рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдпрд╣ рд▓реЗрдЦ, рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЬреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдЬреЛ рдпреВрдПрдордПрд▓ рд░рд╛рдЬреНрдп рдФрд░ рдЕрдиреБрдХреНрд░рдо рдЖрд░реЗрдЦ (рд╕реНрдЯреЗрдЯрдЪрд░реНрдЯреНрд╕ рдЖрд░реЗрдЦ рдФрд░ рдЕрдиреБрдХреНрд░рдо рдЖрд░реЗрдЦ) рдХреЗ рд╕рд╛рде
- рд╕рд╛рде
рдШрдЯрдирд╛-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдЗрд╡реЗрдВрдЯ-рд╕рдВрдЪрд╛рд▓рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ) рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рдХреНрд╡рд╛рдВрдЯрдо рд▓реАрдкреНрд╕ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо
QP рдлреНрд░реЗрдорд╡рд░реНрдХ (рдХреНрд╡рд╛рдВрдЯрдо рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо) рдХреЛ рдЗрд╕рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ COS / C ++ рдореЗрдВ RTOS рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдХреА рдЧрддрд┐ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХрд░реЗрдЧрд╛, рдФрд░ рдЗрд╕рдореЗрдВ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ рдЯреВрд▓ рднреА рд╣реЛрдВрдЧреЗред рдЗрди рд╕рднреА рдореЗрдВ рдпрд╣ рддрдереНрдп рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреНрдпреВрдкреА рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рдФрд░ рдЖрд╕рд╛рди рд╣реИ: рдЗрд╕реЗ рдХрдИ рдореЙрдбреНрдпреВрд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдХрдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ precompilation рдХреЗ рджреМрд░рд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

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

QP рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдирд┐рдореНрди рд╡рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
рдПрдХрд▓ рд╕реНрддрд░реАрдп рд░рд╛рдЬреНрдп рдорд╢реАрди (рд╕реБрдкрд░рд╕реНрдЯреЗрдЯ рдХреЗ рдмрд┐рдирд╛) рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
QFsmрдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд
рдСрдЯреЛрдореЗрдЯрди (рд╕реБрдкрд░рд╕реНрдЯреЗрдЯ рдХреЗ рд╕рд╛рде) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
QHsmрдЗрди рд╡рд░реНрдЧреЛрдВ рдХреА рд╡рд╕реНрддреБрдПрдВ рдпреВрдПрдордПрд▓ рдЖрд░реЗрдЦ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐
void dispatch ( const QEvent * e )
рд╣реИред
QP,
QActive рд╡рд░реНрдЧ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ
QHsm рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ (рдЗрд╕реЗ
QFsm рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдЗрд╕ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдПрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдХреНрд░рд┐рдп рд╡рд╕реНрддреБ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдорд╢реАрди рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВред
QP рдореЗрдВ рдПрдХ рдШрдЯрдирд╛
QEvent рд╡рд░реНрдЧ рдпрд╛ рдЙрд╕рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдХреЛ рдПрдХ рд╕рдВрдХреЗрдд рджреНрд╡рд╛рд░рд╛ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ
рд╕рд┐рдЧ рдХреНрд╖реЗрддреНрд░ рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдШрдЯрдирд╛ рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред
QP рдореЗрдВ рдПрдХ рдЕрд╡рд╕реНрдерд╛ рдПрдХ рдлрдВрдХреНрд╢рди (рдпрд╛ рд╕реНрдЯреИрдЯрд┐рдХ рдореЗрдердб) рд╣реИ, рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдЬрд┐рд╕рдХрд╛ рд░реВрдк рд╣реИ:
typedef QState ( * QStateHandler ) ( void * me, QEvent const * e )
, рдЬрд╣рд╛рдВ
рдореЗрд░рд╛ рд╕рдВрджрд░реНрдн рд╣реИ (рдПрдХ рдСрдЯреЛрдореЗрдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ),
e рдкреНрд░рд╛рдкреНрдд рдШрдЯрдирд╛ рд╣реИ
рдШрдЯрдирд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рддреАрди рдореБрдЦреНрдп рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- Q_HANDLED () , рдпрджрд┐ рдЖрдкрдХреЛ рд╕рдВрдХреНрд░рдордг рдХрд┐рдП рдмрд┐рдирд╛ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ;
- Q_TRAN (<рдЕрдЧрд▓реЗ рд░рд╛рдЬреНрдп рдХрд╛ рдкрддрд╛>) - рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ;
- Q_SUPER (<рд╕реБрдкрд░рд╕реНрдЯреЗрдЯ рдПрдбреНрд░реЗрд╕>) - рд╕реБрдкрд░рд╕реНрдЯреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ред рдХреЗрд╡рд▓ QHsm рд╡реЗрдВрдбрд┐рдВрдЧ рдорд╢реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред
рдХреНрдпреВрдкреА рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рдШрдЯрдирд╛рдПрдВ рднреА рд╣реИрдВ рдЬреЛ рд╕рдВрдХреНрд░рдордг рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╣реЛрдиреЗ рдХрд╛ рдХреНрд░рдо рдФрд░ рд╕рдВрдХреНрд░рдордг рдХреЗ рджреМрд░рд╛рди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХреНрд░рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
- рдкрд░рдорд╛рдгреБ рд╕рдВрдХреНрд░рдордг рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ;
- рдирд┐рдХрд╛рд╕ рдШрдЯрдирд╛ ( Q_EXIT_SIG )ред рдЗрд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реБрдкрд░рд╕реНрдЯреЗрдЯ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд╕реБрдкрд░рд╕реНрдЯреЗрдЯ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдШрдЯрдирд╛ рдХреЛ рдХреЗрд╡рд▓ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ( Q_HANDLED );
- рдорд╢реАрди рд▓рдХреНрд╖реНрдп рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рдЪрд▓реА рдЬрд╛рддреА рд╣реИ;
- рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдШрдЯрдирд╛ ( Q_ENTRY_SIG )ред рд░рд╛рдЬреНрдп рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдХреЗрд╡рд▓ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;
- рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдШрдЯрдирд╛ Q_INIT_SIG (рдХреЗрд╡рд▓ QHsm- рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП) - рдПрдХ рдЖрд░рдВрдн рдХрд░рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛ред рдпрд╣ рд╣рдореЗрд╢рд╛ рдЙрдарддрд╛ рд╣реИред рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг ( Q_TRAN ) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдмрд╕ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;
QFsm рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг:
static QState state1(Fsm* me, const QEvent* e) {
switch (e->sig) {
case Q_ENTRY_SIG: {
/* processing */
return Q_HANDLED();
}
case EVENT1_SIG: {
/* processing */
return Q_TRAN(&state2);
}
case EVENT2_SIG: {
/* processing */
return Q_HANDLED();
}
case Q_EXIT_SIG: {
/* processing */
return Q_HANDLED();
}
}
return Q_HANDLED();
}
* This source code was highlighted with Source Code Highlighter .
QHsm рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг:
static QState state1(Hsm* me, const QEvent* e) {
switch (e->sig) {
case Q_ENTRY_SIG: {
/* processing */
return Q_HANDLED();
}
case Q_INIT_SIG: {
/* processing */
return Q_TRAN(&state1_substate1); // return Q_HANDLED();
}
case EVENT1_SIG: {
/* processing */
return Q_TRAN(&state2);
}
case EVENT2_SIG: {
/* processing */
return Q_HANDLED();
}
case Q_EXIT_SIG: {
/* processing */
return Q_HANDLED();
}
}
return Q_SUPER(&superstate1);
}
* This source code was highlighted with Source Code Highlighter .
Q_ENTRY_SIG ,
Q_INIT_SIG ,
Q_EXIT_SIG рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖ рдШрдЯрдирд╛рдПрдБ рдПрдХ рд╣реА рд░рд╛рдЬреНрдп рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реБрдкрд░рд╕реНрдЯреЗрдЯ рдореЗрдВ рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред
рдЙрджрд╛рд╣рд░рдг
рдПрдХ рд╕рдХреНрд░рд┐рдп рдСрдмреНрдЬреЗрдХреНрдЯ (
sm ) рдФрд░ рдЙрд╕ рдкрд░ рдПрдХ рддрд░рдлрд╝рд╛ рдкреНрд░рднрд╛рд╡ рд╡рд╛рд▓реА рдкреНрд░рдгрд╛рд▓реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ (
QK ) рдФрд░
QActive рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдмрддрд╛ рджреЗрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ
рд╕реНрдо рдореЗрдВ рдПрдХ рд╕реНрдЯреЗрдЯ рдбрд╛рдпрдЧреНрд░рд╛рдо рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдкрд░рд┐рдорд┐рдд рд╕реНрдЯреЗрдЯ рдорд╢реАрди рд╣реИред

рдпрд╣ рдЖрдк QP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
//
enum Signals {
PROCEED_SIG = Q_USER_SIG,
CANCEL_SIG,
};
// , PROCEED_SIG
struct ProceedEvt : public QEvent {
ProceedEvt( int value = 0) : value ( value ) { sig = PROCEED_SIG; }
int value ;
};
// , CANCEL_SIG
struct CancelEvt : public QEvent {
CancelEvt() { sig = CANCEL_SIG; }
};
// sm
class Hsm : public QHsm {
public :
Hsm() : QHsm((QStateHandler)&initial) { init(); }
private :
// initial state
static QState initial(Hsm* me, const QEvent* e) {
return Q_TRAN(&superState);
}
static QState superState(Hsm* me, const QEvent* e) {
switch (e->sig) {
case Q_ENTRY_SIG: {
me->count = 10;
return Q_HANDLED();
}
case Q_INIT_SIG: {
return Q_TRAN(&stateA);
}
case CANCEL_SIG: {
return Q_TRAN(&stateC);
}
}
/* QHsm::top - ,
* Q_HANDLED(). */
return Q_SUPER(&QHsm::top);
}
static QState stateA(Hsm* me, const QEvent* e) {
switch (e->sig) {
case PROCEED_SIG: {
return Q_TRAN(&stateB);
}
}
return Q_SUPER(&superState);
}
static QState stateB(Hsm* me, const QEvent* e) {
switch (e->sig) {
case PROCEED_SIG: {
if (me->count > 1) {
me->count *= 2;
return Q_TRAN(&stateA);
}
++me->count;
return Q_HANDLED();
}
case Q_EXIT_SIG: {
cout << "count = " << me->count << endl;
me->count = 0;
return Q_HANDLED();
}
}
return Q_SUPER(&superState);
}
static QState stateC(Hsm* me, const QEvent* e) {
switch (e->sig) {
case PROCEED_SIG: {
if (static_cast< const ProceedEvt*>(e)-> value == 1) {
return Q_TRAN(&superState);
}
break ;
}
}
return Q_SUPER(&QHsm::top);
}
int count;
};
* This source code was highlighted with Source Code Highlighter .
рдЕрдм рдХрдХреНрд╖рд╛
Hsm рдХреА рдПрдХ
рд╕реНрдорд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ (рдКрдкрд░ рджрд┐рдП рдЧрдП рдЕрдиреБрдХреНрд░рдо рдЖрд░реЗрдЦ рджреЗрдЦреЗрдВ) рдФрд░ рдПрдХ рджрд░реНрдЬрди рдШрдЯрдирд╛рдУрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВ:
int main( int argc, char * argv[]) {
Hsm sm; // stateA, count = 10
for ( int i = 0; i < 2; ++i) {
sm.dispatch(&ProceedEvt()); // stateB, count = 10
sm.dispatch(&ProceedEvt()); // stateA, count = 0
sm.dispatch(&ProceedEvt()); // stateB, count = 0
sm.dispatch(&ProceedEvt()); // stateB, count = 1
sm.dispatch(&ProceedEvt()); // stateB, count = 2
sm.dispatch(&ProceedEvt()); // stateA, count = 0
sm.dispatch(&ProceedEvt()); // stateB, count = 0
sm.dispatch(&ProceedEvt()); // stateB, count = 1
sm.dispatch(&ProceedEvt()); // stateB, count = 2
sm.dispatch(&CancelEvt()); // stateC, count = 2
sm.dispatch(&CancelEvt()); // stateC, count = 2
sm.dispatch(&ProceedEvt()); // stateC, count = 2
sm.dispatch(&ProceedEvt(1)); // stateA, count = 10
}
return 0;
}
* This source code was highlighted with Source Code Highlighter .
рдирд┐рд╖реНрдХрд░реНрд╖
рдпреВрдПрдордПрд▓ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдЕрдиреНрдп рд╕рд╛рдзрди: рдЫрджреНрдо рд░рд╛рдЬреНрдп рдкреНрд░рд╛рд░рдВрднрд┐рдХ, рдЕрдВрддрд┐рдо, рдЗрддрд┐рд╣рд╛рд╕, рдЧрд╣рд░рд╛ рдЗрддрд┐рд╣рд╛рд╕ рдФрд░ рдЕрдиреНрдп; рд╕реНрдердЧрд┐рдд рдШрдЯрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рд░рд╛рдЬреНрдп рдХреЗ рдСрд░реНрдереЛрдЧреЛрдирд▓ рдШрдЯрдХ, рдЫрд┐рдкреА рд╣реБрдИ рд╕реНрдерд┐рддрд┐, рдЖрджрд┐ рдХреЛ "рд░рд╛рдЬреНрдп рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╛рдВрдЪ рдкреБрд╕реНрддрдХ рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВ, рдЬрд┐рдирдХреА рдореИрдВ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ред
QP рдХреЗ рд▓рд╛рдн
- C рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд C ++ рд╕реЗ рд▓рдЧрднрдЧ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ;
- рдЦреБрд▓рддрд╛ рд╣реИ, рд╕реНрд░реЛрдд рдХреЛрдб рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИ;
- QP рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ GNU рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ;
- рдХреНрд╡рд╛рдВрдЯрдо рд▓реАрдкреНрд╕ рд╕реЗ рдХреНрдпреВрдПрдо рд░рд╛рдЬреНрдп рдЖрд░реЗрдЦ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ;
- рдХреНрд╡рд╛рдВрдЯрдо рд▓реАрдкреНрд╕ рдЙрддреНрдкрд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╛рдлреА рдмрдбрд╝реА рдХрдВрдкрдирд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд┐рддрд╛рдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
QP рдПрдХ рдмрдбрд╝реА рдкреБрд╕реНрддрдХ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, C / C ++ рдореЗрдВ рдкреНрд░реИрдХреНрдЯрд┐рдХрд▓ рдпреВрдПрдордПрд▓ рд╕реНрдЯреЗрдЯрдЪрд░реНрд╕, рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг: рдХреНрд╡рд╛рдВрдЯрдо рд▓реАрдкреНрд╕ рдХреЗ
рд╕рдВрд╕реНрдерд╛рдкрдХ рд╕реЗ рдПрдВрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЗрд╡реЗрдВрдЯ-рдбреНрд░рд┐рд╡реНрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, рдЬрд┐рд╕реЗ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдкрд╣рд▓рд╛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдФрд░ рджреВрд╕рд░рд╛ рдПрдХред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП QP рдХреЛ рдХреИрд╕реЗ рддреЗрдЬ рдХрд░реЗрдВ, QS рдЯреНрд░реИрд╕рд░ (QSpy) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдФрд░ QP-nano рдХреНрдпрд╛ рд╣реИред
рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ, рд╕реНрдЯреЗрдЯ рдкреИрдЯрд░реНрди рдФрд░ рд╕реНрд╡рд┐рдЪ рд╡рд┐рдзрд┐ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рддреБрд▓рдирд╛ рднреА рдХрд░рддрд╛ рд╣реИред
рдкреБрд╕реНрддрдХ рдореЗрдВ рдкреИрд╕рд╛ рдЦрд░реНрдЪ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "рдореБрдлреНрдд рдбрд╛рдЙрдирд▓реЛрдб" рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдВрджрд░реНрдн