Довольно часто в программах, написанных на Qt, бывает необходимо осуществить задержку в куске кода. Если вы пишете класс-наследник QThread, то вам повезло, поскольку в вашем распоряжении есть функция-член класса QThread msleep(). Но что делать, если задержку надо вставить в методе класса, который не наследуется от QThread? Или в функции, которая вообще не является членом класса?
Для решения этой задачи я обычно использую вот такую простую функцию:
inline void qt_msleep( int ms )
{
QSemaphore s( 0 );
if( ms > 0 )
s.tryAcquire( 1, ms );
}
Здесь задержка организована посредством попытки захватить семафор в течение заданного времени (в миллисекундах).