без привязки к очереди событий внутри, в Qt есть надстройка над потоками в виде QThread в ней есть метод exec() он блокирует поток (не выходит из функции), но в потоке начинает жить обработчик событий, ты можешь обрабатывать сигналы, слоты, Qtimer и т.п.