16
Système / 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)
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
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();
}
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