Почему qCritical или qDebug не будут работать при вызове из деструктора? - PullRequest
5 голосов
/ 15 ноября 2011

У меня есть многопоточное приложение, которое я изначально разрабатывал с использованием Qt 4.6 и Qt Creator 2.2 (или, возможно, 2.1), а недавно я обновился до Qt 4.7 и Qt Creator 2.3 (это все в Windows). Ранее я проверял порядок уничтожения различных потоков и объектов в моем приложении, помещая вызовы qCritical() в деструкторы. Это легко подтвердило, что все было уничтожено в порядке, который я ожидал.

Однако после обновления до более новых версий я заметил, что сообщения не всегда отображаются на панели «Вывод приложения» в Qt Creator. Порядок сообщений всегда правильный, но в какой-то случайный момент вывод просто перестает отображаться. Иногда вывод не отображается вообще. Тем не менее, я могу подтвердить, что объекты уничтожаются, и мое приложение завершается без ошибок.

Проблема по-прежнему возникает, когда я использую qDebug() для отображения сообщений, но все отображается нормально, если вместо этого я использую простой printf(). Что может быть причиной остановки вывода приложения до завершения очистки приложения? Есть ли изменения в новейших версиях Qt или Qt Creator, которые изменяют поведение этих функций при вызове из деструктора?

1 Ответ

0 голосов
/ 16 ноября 2011

Поскольку qDebug взаимодействует с QApplication, и, возможно, теперь некоторая его часть уничтожается раньше всех других частей приложения. Может быть. Однако попробуйте уничтожить ваши объекты вручную, и только затем вызовите QApplication :: exit ();

...