Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Milo le Septembre 12, 2014, 06:58:03 pm

Titre: Affichage de sprite et Threads
Posté par: Milo le Septembre 12, 2014, 06:58:03 pm
Bonjour,

J'essaie d'afficher des images à partir de plusieurs threads depuis quelques semaines deja, pas de problème particulier avec le setActive() comme on pourrait se douter à la vue du titre du post mais un petit problème d'optimisation.
J'aurais besoin d'afficher disons une petite dizaine d'images qui bougeraient simultanément. J'ai donc utilisé un mutex pour que chaque thread ai son temps de parole, le problème est que les images ont une grosse tendance à clignoter, l'affichage peut être très bon comme très moyen et je suis persuadé qu'il est possible de faire mieux. Je pense que des images s'affichent plus fréquemment que d'autres, d'où le clignotement assez désagréable.
Ma question est donc comment est ce que je pourrai partager efficacement l'affichage de mes images, sans risque de "famine" ? (j'entends donc par famine qu'aucune image ne soit laissée de coté, dans l'idéal qu'elles s'affichent les unes après les autres sans qu'aucune ne soit laissée de coté)

Cordialement,
Mickael
Titre: Re : Affichage de sprite et Threads
Posté par: TheKingArthur le Septembre 12, 2014, 11:36:12 pm
Tu n'a pas un code à proposer ? Ca serai plus claire.

Je ne voit la problème.
Titre: Re : Affichage de sprite et Threads
Posté par: Milo le Septembre 13, 2014, 09:47:12 am
Je n'ai pas vraiment de code à proposer, à la limite je peux t'en faire un petit rapidement pour que tu vois l'idée :
void affichage1(mutex* mut){
    //si mutex ok on affiche image1
    //sinon on attend
}

void affichage2(mutex* mut){
    //si mutex ok on affiche image2
    //sinon on attend
}

void affichage3(mutex* mut){
    //si mutex ok on affiche image3
    //sinon on attend
}

int main(){
    mutex* mut = new mutex;
    trhead1(affichage1, mut);
    thread1.detach();
    trhead2(affichage2, mut);
    thread2.detach();
    trhead3(affichage3, mut);
    thread3.detach();
    return 0;
}

 

Tu vois mieux le truc avec ça ?
Les images sont gérées avec le mutex mais rien n'empêche de laissé en famine l'un de ses threads qui ne sera donc pas affiché pendant un moment, ce qui rend selon moi l'effet de clignotement.
J'aimerai donc savoir si vous aviez une solution pour que chacune des images ai son temps de "parole" et qu'aucune ne soit pas affichée trop longtemps.
Titre: Re : Affichage de sprite et Threads
Posté par: Hiura le Septembre 13, 2014, 09:54:32 am
Citer
J'aurais besoin d'afficher disons une petite dizaine d'images qui bougeraient simultanément.

Un thread par animation est plus qu'overkill. Tu auras très probablement les pires performances imaginables, bien pire qu'un truc séquentiel.

Si t'es nouveau avec les threads, soit oublie les un moment encore, soit apprend des cas d'utilisation idéal. C'est pas ce genre d'outil qu'on utilise tous les jours.
Titre: Re : Affichage de sprite et Threads
Posté par: Milo le Septembre 13, 2014, 10:01:28 am
Effectivement je suis loin d'être complétement à l'aise avec les threads , c'est justement pour cette raison que j'essaie des trucs avec.
Si tu avais un "cas d'utilisation idéal" pour me mettre sur la voie, ce serait sympa  :)
Titre: Re : Affichage de sprite et Threads
Posté par: Hiura le Septembre 13, 2014, 10:46:16 am
Il te faut bien plus qu'un cas d'utilisation, il te faut un bon bouquin qui t'explique tout ce qui va autour (genre section critique, synchronisation, ...). Regarde un peu sur le web ce que les gens proposent; je n'ai pas de livre à te proposer comme ça.