У меня есть проблема, и я не уверен, что с этим делать.Обработка событий процесса Qt дольше, чем указано
Я запускаю Qt 4.8.6, создатель Qt 3.3.2, среда в Ubuntu 12.04 перекрестная компиляция на Beaglebone Black работает Debian 7 kernel 3.8.13.
Вопрос, который я вижу, что этот код:
if (qApp->hasPendingEvents())
{
qDebug() << "pending events";
}
qApp->processEvents(QEventLoop::AllEvents, 10);
не работает, как это должно в соответствии с (по крайней мере моей интерпретации) сдаточной документации Qt. Я ожидал бы, что цикл событий процесса будет работать для AT MOST с указанными 10 миллисекундами.
Что происходит, инструкция qDebug никогда не печатается. Тогда я ожидал, что нет никаких событий, которые нужно обработать, и процесс событий заходит очень быстро. В большинстве случаев это так.
Что происходит (не каждый раз, но достаточно часто) оператор qDebug пропускается, а инструкция processEvents выполняется где-то между 1 и 2 секундами.
Есть ли способ, которым я могу вникать в то, что происходит в событиях процесса, и выяснить, что вызывает задержку?
Я не вижу остальную часть вашего кода, но похоже, что вы пишете псевдосинхронный код спагетти, а где-то еще в вашем коде это может укусить вас. Вы выполняете операцию где-то, которая блокирует эти 1-2 секунды. Когда вы повторно вводите цикл событий, любые существующие таймауты игнорируются, поэтому, если этот 'processEvents' вызывает ваш код, который снова вызывает' processEvents', у вас проблемы. Вообще говоря, вы можете написать чистый асинхронный код без каких-либо вызовов 'processEvents'. –
Вообще говоря, если вы хотите восстановить контроль через определенное время, вы должны использовать для этого таймер. Вы не будете сражаться с проблемами реентерации или с системными событиями, обработка которых занимает слишком много времени - или, по крайней мере, вы будете делать все возможное, чтобы сохранить свой код под контролем как можно раньше. –