1

Voilà la situation: je lance un thread. Dans mon thread, juste avant qu'il se termine, je met une variable threadIsFinished à true. Quand mon programme principale quit, je veux qu'il kill le thread si il n'est pas fini, et qu'il ne fasse rien sinon.
Le problème, c'est que je ne veux pas que le programme kill le thread entre le moment où la variable threadIsFinished est changée, et le moment où le thread est effectivement fini.

Contrainte: j'utilise les thread de SDL, donc je n'ai pas accès à beaucoup de fonctions (http://www.libsdl.org/cgi/docwiki.cgi/SDL_Threads)

2

Utilise un mutex?
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

oui, mais quand/comment est-ce que je dé-lock?

...
    SDL_mutexP(mutex);
    threadIsFinished = true;
    return 0;
    //SDL_mutexV(mutex); ??
}

4

Il faut faire un wait sur le "kill" du thread

faut que je retrouve les fonctions qui vont bien, mais sous windows par exemple un WaitForSingleObject sous windows sur le thread permet de faire ça.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

5

en utilisant des fonctions spécifiques à l'OS, je me doute bien qu'on peut arriver à faire ce que je veux, mais j'utilise SDL.

6

Dans ton thread, tu fais:
SDL_mutexP(mutex); // P1
threadIsFinished = true;
SDL_mutexV(mutex); // V1
return 0; // end of thread


Dans ton programme principal, tu fais:
SDL_mutexP(mutex); // P2
if (!threadIsFinished)
  SDL_KillThread(thread);
threadIsFinished = true;
SDL_mutexV(mutex); // V2


Comme ça, tu as ces séquences possibles:
* Le thread a déjà passé V1 quand tu atteinds P2, donc tu ne vas pas tuer le thread, et au pire il lui reste le return 0; à exécuter.
* Le thread se trouve dans la section critique (P1-V1) quand tu atteinds P2, le programme attend, threadIsFinished sera mis quand P2 est passé et le thread n'est pas touché.
* Le thread n'a pas encore passé P1 quand tu atteinds P2. La section critique P2-V2 est atteinte:
- si le thread n'arrive pas à P1, il sera tué et tout sera comme prévu.
- si le thread arrive à P1, il attendra, et tu le tues pendant son attente, normalement ça devrait fonctionner aussi.
Cette solution correspond-elle à tes attentes? Si c'est non, qu'est-ce qui ne va pas?
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

7

cette solution correspond à mes attentes, merci.