Пламенный куку!
Есть средних размеров проект с десятком плагинов, часть из которых ожидают всяких событий извне, часть — от других плагинов. Все живут на основном цикле обработке событий, созданы искусственные условия, когда источники внешних событий выключены, а значит никаких событий в системе не гоняется (по крайней мере теоретически, CPU usage 0). Создаю плагин, слушающий запросы из сети (QTcpSocket). В пустом проекте он откликается 2к раз в секунду (нам этого хватает с запасом, переписывать на более нормальную сетевую библиотеку не в приоритете). Теперь засовываем плагин в основной проект и имеем 40/сек, CPU usage 0.
Следующий эксперимент — в этом же проекте запускаем плагин в отдельном потоке со своим event-loop-ом, получаем те 2к/сек.
Есть предположение, что какие-то плагины делают что-то не так и впадают в кратковременное ожидание в основном потоке либо явным sleep-ом, либо неявно блокирующим открытием соединения с БД и тому подобными вещами.
Код всего есть. Эксперименты с поочередным отключением плагинов затруднены из-за уж совсем черезжопной конфигурации всего этого. Сейчас я по всей видимости этим займусь, но хочется варианта отладки попроще, если не сейчас то на будущее. Посему вопрос, как «посмотреть», что происходит в основном цикле обработки событий программы (QCoreApplication)? В принципе достаточно чего-то вроде такого лога (с временем, конечно):
пока нет событий, жду новых есть новые события! начинаю обработку события Х заканчиваю обработку события Х начинаю обработку события Y заканчиваю обработку события Y пока нет событий, жду новых