[SFML 2.0] Program wywala się w trybie Release z błędem AppHangB1
Ostatnio zmodyfikowano 2013-08-27 15:19
rafixxx25 Temat założony przez niniejszego użytkownika |
[SFML 2.0] Program wywala się w trybie Release z błędem AppHangB1 » 2013-08-24 17:47:35 Witam! Mam problem podobny do tego z kiedyś, lecz przyczyna jest najprawdopodobniej inna. Program wywala się tylko w trybie Release - podczas Debugowania nie ma takiego problemu. W przeciwieństwie do poprzedniego problemu, teraz program wywala się po kilku sekundach od włączenia niezależnie od podjętej czynności(mogę włączać opcje w menu itd.) Kod błędu: Nazwa zdarzenia problemu: AppHangB1 Sygnatura czasowa aplikacji: 521239ee Podpis zawieszenia: 18c2 Typ zawieszenia: 0
Używam Visual Studio 2010 Express. Patrząc na menadżer zadań nie ma żadnych problemów z pamięcią. Może ktoś z was spotkał się już z podobnym błędem AppHangB1? Kodu zarzucał nie będę, sam poszukam błędu w nim, ale może ktoś z was miał kiedyś podobny problem i wie w czym rzecz. Pozdrawiam. |
|
rafixxx25 Temat założony przez niniejszego użytkownika |
» 2013-08-27 11:50:15 Jednak trochę się myliłem co do występowania błędu. Jakoś 8-10 sekund działania programu jest zawsze prawidłowe. Po upływie tego czasu jeśli kliknę gdziekolwiek myszką(czy na puste pole, czy na wybór opcji z menu) pojawia się biały ekran i ten błąd AppHangB1. Wyjątkiem jest tutaj opcja Koniec(i=1), która prawidłowo zamyka program. Problem występuje nawet w momentach w których obsługa myszy nie jest zaimplementowana. Tutaj kod mojego menu: int Menu::display() { applicationWindow->setMouseCursorVisible( true ); do { applicationWindow->clear(); applicationWindow->draw( background ); sf::Vector2i mousePosition = sf::Mouse::getPosition( * applicationWindow ); for( int i = 0; i < numberOfOptions; i++ ) applicationWindow->draw( options[ i ] ); applicationWindow->display(); for( int i = 0; i < numberOfOptions; i++ ) if( sf::Mouse::isButtonPressed( sf::Mouse::Button::Left ) && options[ i ].contain( mousePosition ) ) return i; } while( !sf::Keyboard::isKeyPressed( sf::Keyboard::Key::F4 ) ||( !sf::Keyboard::isKeyPressed( sf::Keyboard::Key::LAlt ) ) &&( !sf::Keyboard::isKeyPressed( sf::Keyboard::Key::RAlt ) ) ); return numberOfOptions; }
|
|
ison |
» 2013-08-27 14:01:56 zwracasz numberOfOptions a potem pewnie gdzieś się odwołujesz do options[numberOfOptions] po wyjściu z funkcji |
|
rafixxx25 Temat założony przez niniejszego użytkownika |
» 2013-08-27 14:15:12 Dokładniej mówiąc jest tak(wiem, że trochę dziwna konstrukcja :P): Menu menu( applicationWindow, 0 ); do { Game game = Game( applicationWindow, false, numberOfPlayers ); int option = menu.display(); switch( option ) { case 0: end = game.start( _players, back ); break; case 1: end = true; break; default: end = true; break; } } while( !end );
applicationWindow.close();
Ogólnie zasada działania menu jest taka, że zwraca wybraną opcję(0 lub 1 w tym przypadku) albo w przypadku kliknięcia alt+F4 zwraca wartość z poza zakresu - 2(która też oznacza zamknięcie). |
|
maly |
» 2013-08-27 14:15:17 Trochę wygląda to jakbyś wogóle nie używał poolEvents. |
|
rafixxx25 Temat założony przez niniejszego użytkownika |
» 2013-08-27 14:34:43 Ponieważ dokładnie tak jest :P Jakoś wygodniej mi korzysta się bezpośrednio z klawiatury, czy myszy. Ale chyba z tego nie wynikają żadne błędy? |
|
ison |
» 2013-08-27 14:40:22 jak nigdzie nie odbierasz eventów to aplikacja uznawana jest za 'brak odpowiedzi'. |
|
rafixxx25 Temat założony przez niniejszego użytkownika |
» 2013-08-27 15:08:13 Wielkie dzięki, nie wpadłem na to ;)
No to 3 pytania: - czy używanie eventów zamiast bezpośredniego dostępu do klawiatury i myszki jest "lepsze"(bardziej optymalne, bardziej niezawodne)? - czy da się "wyłączyć" eventy tak, by aplikacja nie zawieszała się? - czy odbieranie eventów w pętli głównej, ale nie obsługiwanie ich w żaden sposób jest dużym "nietaktem"? :P |
|
« 1 » 2 |