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

Auteur Sujet: Thread et destruction de l'objet  (Lu 3029 fois)

0 Membres et 1 Invité sur ce sujet

nico69

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
Thread et destruction de l'objet
« le: Septembre 22, 2013, 12:29:51 pm »
Bonjour,

J'essaye de réaliser un petit bomberman.

Pour l'explosion des bombes, j'utilise des threads pour pouvoir les animer.

A la fin de l'animation, et donc du thread, j'ai besoin de supprimer cette bombe.
Je les crée dynamiquement, et donc je doit gérer leur destruction.

Voici les codes (raccourcis)
//Le thread appelé pour animer la bombe
void Bombe::boomThread()
{
// ....
    sf::sleep(sf::milliseconds(DELAY_EXPLODE));
    m_map->delBombe(this);
}
 
//suppression de la bombe
void Map::delBombe(Bombe *b)
{
    unsigned int i;
 
    for(i = 0 ; i < m_bombes.size() ; ++i)
        if(b == m_bombes[i])
            break;
 
    if (i == m_bombes.size())
        return;
 
    delete m_bombes[i]; // ca plante ici
 
    for(unsigned int j = i ; j < m_bombes.size() - 1 ; ++j)
        m_bombes[j] = m_bombes[j + 1];
 
    m_bombes.pop_back();
}

Je suis sur que la bombe a été créé dynamiquement, donc je peut appeler delete.
Par contre celui-ci est appelé par le thread qui dépend de cette même bombe.

Comment faire quelque chose de similaire, sans que le delete soit appelé dans le thread ?

Merci

Nico

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Thread et destruction de l'objet
« Réponse #1 le: Septembre 22, 2013, 07:09:51 pm »
Citer
Pour l'explosion des bombes, j'utilise des threads pour pouvoir les animer.
Mon dieu... surtout pas. Pourquoi un thread, alors que tu as déjà une boucle de jeu qui tourne dans ton thread principal et dans laquelle tu peux faire ce que tu veux, en mesurant simplement le temps écoulé pour déclencher les différentes animations ?
Laurent Gomila - SFML developer

nico69

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
Re : Thread et destruction de l'objet
« Réponse #2 le: Septembre 22, 2013, 07:26:58 pm »
J'aurais trouvé ça plus simple et trivial de faire comme ça (même si dans ce cas la c'est un peut problématique).
La bombe est instanciée, puis elle se débrouille d'elle même, sans avoir besoin d'un appelle extérieur pour update son état.

Il faudrait faire comment ?
A chaque tour de la boucle, appeler une fonction d'update et lui donnant le temps écoulé depuis le précédent appel (ou un instant x) et check si elle est "encore en vie" ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Thread et destruction de l'objet
« Réponse #3 le: Septembre 22, 2013, 07:48:41 pm »
Citer
Il faudrait faire comment ?
A chaque tour de la boucle, appeler une fonction d'update et lui donnant le temps écoulé depuis le précédent appel (ou un instant x) et check si elle est "encore en vie" ?
C'est très exactement ce qu'il faut faire, oui.

Tu imagines quand tu auras 500 entités à mettre à jour ? Tu vas faire quoi, 500 threads ? Chaque thread supplémentaire a un coût qui est double : premièrement en performance pure (le CPU passe son temps à switcher entre threads au lieu d'exécuter ton code), et deuxièmement en complexité de code : avoir plusieurs threads ça veut dire les synchroniser, éviter les accès concurrents, etc.
Laurent Gomila - SFML developer

nico69

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
Re : Thread et destruction de l'objet
« Réponse #4 le: Septembre 22, 2013, 08:01:22 pm »
oui pas faux.

Merci beaucoup, je vais faire comme ça.