Злой Дядька в сети — 12 апреля 2016

Своя функция задержки в Qt

12 апреля 2016 (14:37:49)

Довольно часто в программах, написанных на Qt, бывает необходимо осуществить задержку в куске кода. Если вы пишете класс-наследник QThread, то вам повезло, поскольку в вашем распоряжении есть функция-член класса QThread msleep(). Но что делать, если задержку надо вставить в методе класса, который не наследуется от QThread? Или в функции, которая вообще не является членом класса?

Для решения этой задачи я обычно использую вот такую простую функцию:

inline void qt_msleep( int ms )
{
  QSemaphore s( 0 );
  if( ms > 0 )
    s.tryAcquire( 1, ms );
}

Здесь задержка организована посредством попытки захватить семафор в течение заданного времени (в миллисекундах).