Mam wielowątkową aplikację, którą pierwotnie rozwijałem przy użyciu Qt 4.6 i Qt Creator 2.2 (lub prawdopodobnie 2.1), a ostatnio zaktualizowałem do Qt 4.7 i Qt Creator 2.3 (to wszystko w Windowsie). Wcześniej testowałem kolejność niszczenia różnych wątków i obiektów w mojej aplikacji, umieszczając w destruktorach połączenia z numerem qCritical()
. Łatwo potwierdził, że rzeczy zostały zniszczone w kolejności, jakiej się spodziewałem.Dlaczego qCritical lub qDebug nie zadziała po wywołaniu z destruktora?
Jednak po aktualizacji do nowszych wersji zauważyłem, że komunikaty nie są zawsze wyświetlane na panelu Wyjście aplikacji w Qt Creator. Kolejność komunikatów jest zawsze poprawna, ale w pewnym losowym punkcie wyjście przestaje być pokazywane. Czasami w ogóle nie widać żadnego wyjścia. Niemniej jednak mogę potwierdzić, że obiekty są niszczone i moja aplikacja wychodzi bezbłędnie.
Problem nadal występuje, gdy używam qDebug()
do wyświetlania komunikatów, ale wszystko wyświetla się dobrze, jeśli zamiast tego używam prostego printf()
. Jaki może być powód zakończenia działania aplikacji przed zakończeniem czyszczenia aplikacji? Czy są jakieś zmiany w najnowszych wersjach Qt lub Qt Creator, które zmieniają sposób działania tych funkcji po wywołaniu z wnętrza destruktora?
Czy możesz dodać swój kod? Czy to samo dzieje się po uruchomieniu aplikacji z cmd.exe? –
@ Styne666: Postaram się wyodrębnić mały segment kodu, który odtwarza problem. Jest za dużo, by publikować tak jak jest. – gnovice