2011-11-15 15 views
5

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?

+0

Czy możesz dodać swój kod? Czy to samo dzieje się po uruchomieniu aplikacji z cmd.exe? –

+0

@ Styne666: Postaram się wyodrębnić mały segment kodu, który odtwarza problem. Jest za dużo, by publikować tak jak jest. – gnovice

Odpowiedz

0

Ponieważ qDebug współdziała z QApplication i może być, teraz część jego części zostaje zniszczona przed wszystkimi innymi częściami aplikacji. Może. Spróbuj jednak ręcznie niszczyć obiekty, a dopiero potem wywołaj QApplication :: exit();

Powiązane problemy