Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.0] Program wywala się w trybie Release z błędem AppHangB1

Ostatnio zmodyfikowano 2013-08-27 15:19
Autor Wiadomość
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.
P-90851
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:
C/C++
int Menu::display()
{
    applicationWindow->setMouseCursorVisible( true ); //applicationWindow - wskaznik na obiekt klasy sf::RenderWindow
    //Tutaj jest ustawianie pozycji grafik
    do
    {
        applicationWindow->clear();
        applicationWindow->draw( background );
        sf::Vector2i mousePosition = sf::Mouse::getPosition( * applicationWindow );
        for( int i = 0; i < numberOfOptions; i++ )
             applicationWindow->draw( options[ i ] ); //Rysowanie grafik(opcji wyboru)
       
        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;
}
P-91007
ison
» 2013-08-27 14:01:56
zwracasz numberOfOptions a potem pewnie gdzieś się odwołujesz do options[numberOfOptions] po wyjściu z funkcji
P-91024
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):
C/C++
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).
P-91027
maly
» 2013-08-27 14:15:17
Trochę wygląda to jakbyś wogóle nie używał poolEvents.
P-91028
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?
P-91033
ison
» 2013-08-27 14:40:22
jak nigdzie nie odbierasz eventów to aplikacja uznawana jest za 'brak odpowiedzi'.
P-91037
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
P-91043
« 1 » 2
  Strona 1 z 2 Następna strona