Таймер и аналог try-finally в c++

May 26, 2012 17:48

Забавный факт - в каждом QOBject есть встроенный таймер. И, кстати, qobject.cpp весит аж 146 kB.

Возникла такая задачка - есть несколько функций, во время работы которых требуется приостановить таймер главного окна. Из функций может быть несколько выходов (return'ов) поэтому управлять таймером вручную становится скучновато. Я придумал следующий фокус - может быть, даже есть такой паттерн? - создать класс, управляющий таймером формочки, примерно такой:
class StopTimer
{
  Form f;
public:
 StopTimer(Form *frm)
  :f(frm)
  {
    f->killTimer(f->timerID);
  }

~StopTimer()
  {
  f->timerID = f->startTimer(1000);
  }
}

В области видимости объекта StopTimer таймер будет остановлен, а в конце области видимости будет снова запущен уже с новым id:

void Form::slotMakeSomethingImportant()
{
      StopTimer st(this);
       ...      // тут код, который не выбрасывает исключения, но может содержать много выходов по return
}

и вообще бред, быдлокод, qt

Previous post Next post
Up