Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Le programme ne répond plus  (Lu 14668 fois)

0 Membres et 1 Invité sur ce sujet

Aaltar

  • Invité
Le programme ne répond plus
« le: Avril 18, 2012, 06:12:41 pm »
Bonjour,
J'ai un problème avec mon application depuis que j'ai ajouté du son.
Lorsque je ferme l'application en fermant la console, j'ai le droit à un "le programme ne répond plus, windows cherche une solution". Alors que quand je quitte en fermant la fenetre de la sfml... tout se passe bien.
Le bug est là depuis que j'ai ajouté ces lignes de codes.

Deux nouveaux attributs pourma classe cpu:
sf::SoundBuffer m_SBuffer;
sf::Sound m_sound;

qui sont initialisés dans le constructeur:
char beep[] = {
#include "beep.aiff.hpp"
};
m_SBuffer.loadFromMemory(beep, sizeof(beep));
m_sound.setBuffer(m_SBuffer);

beep.aiff.hpp contenant ma piste sonore.


Et une fonction appelée avant le rendu graphique dans le main:

void CPU::jouerSon()
{
if(compteurSon!=0)
{
m_sound.play();
compteurSon=0;
}
}

Voyez vous l'erreur ?
Le problème disparaît en supprimant ces quelques lignes. Mais sinon tous marche parfaitement, sauf au moment de la fermeture...

Merci
(j'utilise la sfml 2.0)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Le programme ne répond plus
« Réponse #1 le: Avril 18, 2012, 06:36:46 pm »
Fermer la console n'a jamais été un moyen propre de clore une application, c'est comme si tu tuais sauvagement le processus.
Laurent Gomila - SFML developer

Aaltar

  • Invité
Re : Le programme ne répond plus
« Réponse #2 le: Avril 19, 2012, 04:47:43 pm »
Je vois, mais n'y aurait il pas un moment de régler ce problème ?
Merci

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Le programme ne répond plus
« Réponse #3 le: Avril 19, 2012, 04:56:11 pm »
Si : ne pas arrêter le programme en fermant la console.
Laurent Gomila - SFML developer

Aaltar

  • Invité
Re : Le programme ne répond plus
« Réponse #4 le: Avril 19, 2012, 05:11:49 pm »
Je veux dire, autre que celui là. D:

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Le programme ne répond plus
« Réponse #5 le: Avril 19, 2012, 06:00:16 pm »
Pour moi ce n'est pas un problème.

Mais bon, c'est probablement lié à ça :
https://github.com/SFML/SFML/issues/30
donc ce sera réglé un jour.
Laurent Gomila - SFML developer

Aaltar

  • Invité
Re : Le programme ne répond plus
« Réponse #6 le: Avril 19, 2012, 06:18:00 pm »
Ahok, merci.
De toutes façon, j'avais prévu d’intégrer le tout dans une fenêtre QT pour les menus. Mais moi la console ça m'a toujours attiré...

Aaltar

  • Invité
Re : Le programme ne répond plus
« Réponse #7 le: Avril 20, 2012, 07:29:00 pm »
Je me permet d'up car j'ai un problème pour l'interface avec QT.
J'ai repris le code du tuto, mais QT me dit que create et display n'existent pas dans sf ...
Voila mon .pro
SOURCES += \
    QSFMLcanvas.cpp

HEADERS += \
    QSFMLcanvas.hpp

INCLUDEPATH += D:\Programmes\CodeBlocks\SFML-2.0\include
LIBS += -lsfml-system -lsfml-window -lsfml-graphics -lsfml-audio

Peux tu m'aider encore une fois s'il te plait ?
Merci

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Le programme ne répond plus
« Réponse #8 le: Avril 20, 2012, 07:34:29 pm »
Citer
QT me dit que create et display n'existent pas dans sf
Le message d'erreur exact s'il te plaît ;)
Laurent Gomila - SFML developer

Aaltar

  • Invité
Re : Le programme ne répond plus
« Réponse #9 le: Avril 20, 2012, 07:39:29 pm »
D:\Mes fichiers\Programmation\Projets\Chip8_simulateur-build-desktop-Qt_4_8_0_for_Desktop_-_MinGW__Qt_SDK__Debug\..\Chip8_simulateur\QSFMLcanvas.cpp:90: erreur : 'create' is not a member of 'sf'

C'est le fichier dispo dans le tutoriel, j'ai juste enlevé la majuscule, car je suis en 2.0 .
Et le même pour display .

Aaltar

  • Invité
Re : Le programme ne répond plus
« Réponse #10 le: Avril 21, 2012, 10:36:57 am »
Tu ne sais pas ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Le programme ne répond plus
« Réponse #11 le: Avril 21, 2012, 10:46:09 am »
Peux-tu remettre le code correspondant ? Histoire d'être absolument sûr.
Laurent Gomila - SFML developer

Aaltar

  • Invité
Re : Le programme ne répond plus
« Réponse #12 le: Avril 21, 2012, 11:32:11 am »
////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include "QSFMLCanvas.hpp"

// Platform-specific headers
#ifdef Q_WS_X11
    #include <Qt/qx11info_x11.h>
    #include <X11/Xlib.h>
#endif


////////////////////////////////////////////////////////////
/// Construct the QSFMLCanvas
////////////////////////////////////////////////////////////
QSFMLCanvas::QSFMLCanvas(QWidget* Parent, const QPoint& Position, const QSize& Size, unsigned int FrameTime) :
QWidget       (Parent),
myInitialized (false)
{
    // Setup some states to allow direct rendering into the widget
    setAttribute(Qt::WA_PaintOnScreen);
    setAttribute(Qt::WA_OpaquePaintEvent);
    setAttribute(Qt::WA_NoSystemBackground);

    // Set strong focus to enable keyboard events to be received
    setFocusPolicy(Qt::StrongFocus);

    // Setup the widget geometry
    move(Position);
    resize(Size);

    // Setup the timer
    myTimer.setInterval(FrameTime);
}


////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////
QSFMLCanvas::~QSFMLCanvas()
{
    // Nothing to do...
}


////////////////////////////////////////////////////////////
/// Notification for the derived class that moment is good
/// for doing initializations
////////////////////////////////////////////////////////////
void QSFMLCanvas::OnInit()
{
    // Nothing to do by default...
}


////////////////////////////////////////////////////////////
/// Notification for the derived class that moment is good
/// for doing its update and drawing stuff
////////////////////////////////////////////////////////////
void QSFMLCanvas::OnUpdate()
{
    // Nothing to do by default...
}


////////////////////////////////////////////////////////////
/// Return the paint engine used by the widget to draw itself
////////////////////////////////////////////////////////////
QPaintEngine* QSFMLCanvas::paintEngine() const
{
    return 0;
}


////////////////////////////////////////////////////////////
/// Called when the widget is shown ;
/// we use it to initialize our SFML window
////////////////////////////////////////////////////////////
void QSFMLCanvas::showEvent(QShowEvent*)
{
    if (!myInitialized)
    {
        // Under X11, we need to flush the commands sent to the server to ensure that
        // SFML will get an updated view of the windows
        #ifdef Q_WS_X11
            XFlush(QX11Info::display());
        #endif

        // Create the SFML window with the widget handle
        sf::create(winId());

        // Let the derived class do its specific stuff
        OnInit();

        // Setup the timer to trigger a refresh at specified framerate
        connect(&myTimer, SIGNAL(timeout()), this, SLOT(repaint()));
        myTimer.start();

        myInitialized = true;
    }
}


////////////////////////////////////////////////////////////
/// Called when the widget needs to be painted ;
/// we use it to display a new frame
////////////////////////////////////////////////////////////
void QSFMLCanvas::paintEvent(QPaintEvent*)
{
    // Let the derived class do its specific stuff
    OnUpdate();

    // Display on screen
    sf::display();
}
 


#ifndef QSFMLCANVAS_HPP
#define QSFMLCANVAS_HPP

////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Graphics.hpp>
#include <Qt/qwidget.h>
#include <Qt/qtimer.h>


////////////////////////////////////////////////////////////
/// QSFMLCanvas allows to run SFML in a Qt control
////////////////////////////////////////////////////////////
class QSFMLCanvas : public QWidget, public sf::RenderWindow
{
public :

    ////////////////////////////////////////////////////////////
    /// Construct the QSFMLCanvas
    ///
    /// \param Parent :    Parent of the widget
    /// \param Position :  Position of the widget
    /// \param Size :      Size of the widget
    /// \param FrameTime : Frame duration, in milliseconds (0 by default)
    ///
    ////////////////////////////////////////////////////////////
    QSFMLCanvas(QWidget* Parent, const QPoint& Position, const QSize& Size, unsigned int FrameTime = 0);

    ////////////////////////////////////////////////////////////
    /// Destructor
    ///
    ////////////////////////////////////////////////////////////
    virtual ~QSFMLCanvas();

private :

    ////////////////////////////////////////////////////////////
    /// Notification for the derived class that moment is good
    /// for doing initializations
    ///
    ////////////////////////////////////////////////////////////
    virtual void OnInit();

    ////////////////////////////////////////////////////////////
    /// Notification for the derived class that moment is good
    /// for doing its update and drawing stuff
    ///
    ////////////////////////////////////////////////////////////
    virtual void OnUpdate();

    ////////////////////////////////////////////////////////////
    /// Return the paint engine used by the widget to draw itself
    ///
    ////////////////////////////////////////////////////////////
    virtual QPaintEngine* paintEngine() const;

    ////////////////////////////////////////////////////////////
    /// Called when the widget is shown ;
    /// we use it to initialize our SFML window
    ///
    ////////////////////////////////////////////////////////////
    virtual void showEvent(QShowEvent*);

    ////////////////////////////////////////////////////////////
    /// Called when the widget needs to be painted ;
    /// we use it to display a new frame
    ///
    ////////////////////////////////////////////////////////////
    virtual void paintEvent(QPaintEvent*);

    ////////////////////////////////////////////////////////////
    // Member data
    ////////////////////////////////////////////////////////////
    QTimer myTimer;       ///< Timer used to update the view
    bool   myInitialized; ///< Tell whether the SFML window has been initialized or not
};


#endif // QSFMLCANVAS_HPP
 

Et le .pro est posté plus haut.
« Modifié: Avril 21, 2012, 12:51:32 pm par Laurent »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Le programme ne répond plus
« Réponse #13 le: Avril 21, 2012, 12:52:02 pm »
Je ne suis pas sûr qu'il y ait sf::display et sf::clear dans le code... ;)
Laurent Gomila - SFML developer

Aaltar

  • Invité
Re : Le programme ne répond plus
« Réponse #14 le: Avril 21, 2012, 01:47:11 pm »
Le problème est que create est ambigu, il peut faire référence à diverses fonctions... et donc Qtcreator ne veut pas compiler.

D:\Mes fichiers\Programmation\Projets\Chip8_simulateur-build-desktop-Qt_4_8_0_for_Desktop_-_MinGW__Qt_SDK__Debug\..\Chip8_simulateur\QSFMLcanvas.cpp:92: erreur : reference to 'create' is ambiguous

D:\Mes fichiers\Programmation\Projets\Chip8_simulateur-build-desktop-Qt_4_8_0_for_Desktop_-_MinGW__Qt_SDK__Debug\..\..\..\..\Programmes\CodeBlocks\SFML-2.0\include\SFML\Window\Window.hpp:141: erreur : candidates are: void sf::Window::create(HWND__*, const sf::ContextSettings&)

D:\Mes fichiers\Programmation\Projets\Chip8_simulateur-build-desktop-Qt_4_8_0_for_Desktop_-_MinGW__Qt_SDK__Debug\..\..\..\..\Programmes\CodeBlocks\SFML-2.0\include\SFML\Window\Window.hpp:128: erreur : candidates are: void sf::Window::create(sf::VideoMode, const std::string&, sf::Uint32, const sf::ContextSettings&)

D:\Mes fichiers\Programmation\Projets\Chip8_simulateur-build-desktop-Qt_4_8_0_for_Desktop_-_MinGW__Qt_SDK__Debug\..\..\..\..\Programmes\QtSDK\Desktop\Qt\4.8.0\mingw\include\Qt\qwidget.h:721: error:                 void QWidget::create(HWND__*, bool, bool)
« Modifié: Avril 21, 2012, 01:56:09 pm par Aaltar »