рдХреНрдпреВрдЯреА рдореЗрдВ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдШрдЯрдирд╛

рд╣реЗрд▓реЛ рд╣реИрдмрд░рд╛

Vstpulenie


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

рдпрд╣ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?


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

рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛?

рдПрдХ рдмрд╛рд░ рдореИрдВрдиреЗ MFC рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рдПрдХ OnIdle () рдлрдВрдХреНрд╢рди рдерд╛ рдЬрд┐рд╕реЗ рдУрд╡рд░рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд░рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ Qt рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдЬреЛ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╡рд╣ рдПрдХ рдЯрд╛рдЗрдорд░ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ 0 рдПрдордПрд╕ рдЕрдВрддрд░рд╛рд▓ рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрд╛ рдЧрдпрд╛:
  1. рд╡рд░реНрдЧ QMyWindow : рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ QWidget
  2. {
  3. Q_OBJECT
  4. int m_idleTimerId ;
  5. рдЬрдирддрд╛ :
  6. QMyWindow ( QObject * рдорд╛рддрд╛-рдкрд┐рддрд╛ ) : QWidget ( рдорд╛рддрд╛-рдкрд┐рддрд╛ ) : m_idleTimerId ( - 1 )
  7. {
  8. m_idleTimerId = startTimer ( 0 ) ;
  9. }
  10. рд╢реВрдиреНрдп рдЯрд╛рдЗрдорд░рдИрд╡реЗрдВрдЯ ( qimerEvent * рдШрдЯрдирд╛ )
  11. {
  12. рдЕрдЧрд░ ( рдШрдЯрдирд╛ - > рдЯрд╛рдЗрдорд░рдЖрдИрдб ) ( = = m_idleTimerId )
  13. {
  14. // рдЖрдкрдХрд╛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИ ...
  15. }
  16. }
  17. } ;

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

рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛


рд╕рдорд╛рдзрд╛рди рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдЖрдпрд╛ - WinAPI рдореЗрдВ рд╡рд┐рдВрдбреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
  1. рдЬрдмрдХрд┐ ( рд╕рдВрджреЗрд╢ред рд╕рдВрджреЗрд╢ ! WM_QUIT )
  2. {
  3. рдпрджрд┐ ( PeekMessage ( & msg, NULL , 0U, 0U, PM_REMOVE )
  4. {
  5. TranslMessage ( & msg ) ;
  6. DispatchMessage ( & msg ) ;
  7. }
  8. рдЕрдиреНрдпрдерд╛
  9. рд░реЗрдВрдбрд░ ( ) ;
  10. }

рдХреЛрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╣рдореЗрдВ PeekMessage рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ, рдлрд┐рд░ рд╣рдо рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд┐рдВрдбреЛ рд╣реИрдВрдбрд▓рд░ рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдХрддрд╛рд░ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рд╣рдо рдЕрдкрдиреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред Qt рдкрд░, рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
  1. WinPlatform w ;
  2. MwApplication ( a рдФрд░ w, argc, argv, true ) ;
  3. рдПрдХред installEventFilter ( & w ) ;
  4. рдПрдХред postEvent ( & w, new FloadingEvent ( ) , Qt :: LowEventPyerity ) ;
  5. рдЬрдмрдХрд┐ ( рдбрдмреНрд▓реНрдпреВред рдЖрдЗрд╕рд┐рдВрдЧ ) ( ) || QApplication :: hasPendingEvents ( ) )
  6. {
  7. // QApplication :: sendPostedEvents ();
  8. рдЕрдЧрд░ ( QApplication :: hasPendingEvents ( ) )
  9. QApplication :: processEvents ( ) ;
  10. рдЕрдиреНрдпрдерд╛
  11. рдбрдмреНрд▓реНрдпреВред рд░реЗрдВрдбрд░рдСрдмреНрдЬреЗрдХреНрдЯ ( ) ;
  12. }

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдХреБрдЫ рдмрд┐рдВрджреБ:
  1. рд╣рдо QCloseEvent рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ lastWindowClosed рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡рд┐рдВрдбреЛ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ w.isRunning рд░рд┐рдЯрд░реНрди рдЧрд▓рдд рд╣реЛ рдЬрд╛рдП
  2. рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рддрдм рддрдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВ рдЬрдм рддрдХ рд╡реЗ рдХрддрд╛рд░ рдореЗрдВ рд╣реЛрдВ, рдпрд╛ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рди рдХрд░реЗрдВ

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

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

рдирд┐рд╖реНрдХрд░реНрд╖


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

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


All Articles