Débutant en SDL, je développe un programme d'affichage de visualisation d'algorithme de tri avec des barres (un peu comme ça: https://www.youtube.com/watch?v=Cq7SMsQBEUw), et j'utilise des boucles infinies (pour garder mon programme ouvert entre autres).
Le problème c'est que le programme de tri utilise des boucles for et le programme doit donc arriver au bout avant de pouvoir fermer la fenêtre.
Code actuel (simplifié):
int main(int argc, char *argv[])
{
//Démarage et initilisation de la SDL, du rendu et de tout ce qui va bien...
SDL_bool program_launched = SDL_TRUE;
while(program_launched){
for(i=0;i<taille;i++){
tri_une_valeur_i();
affiche_barres();
attend(20);
}
SDL_Event event;
while(SDL_PollEvent(&event)){
switch(event.type){
case SDL_QUIT:
program_launched = SDL_FALSE;
break;
default:
break;
}
}
}
//Destruction et arrêt
return EXIT_SUCCESS;
}
Je peux mettre tout mon switch(event.type)... dans le for mais il va certes changer la valeur de program_launched mais le while principal "ne s'en rendra pas compte tout de suite".
Je peux aussi mettre une fonction de fin de programme dans le "case" au lieu de changer la valeur de programm_launched, mais voulant aussi rajouter d'autres événements (exemple faire varier le temps d'attente de la fonction attend pendant le tri), je cherche du coup une astuce gérer ces boucles.
Ca necessite une remise en cause importante de la structure du programme.
La raison fondamentale, c'est que tu veux que le fonctionnement soit piloté par deux choses
L'algorithme de tri
La boucle d'événements.de sdl
Et les deux en même temps, c'est pas evident
Une solution "simple" est d'avoir deux processus ou thread. Un qui s'occupe du tri, l'autre qui affiche l'état du tableau.
Ou faire en sorte que l'algorithme de tri produise, dans un fichier ou un tuyau,la liste des situations à afficher. La boucle d'interface ira piocher dedans de temps en temps.
- Edité par michelbillaud 27 octobre 2019 à 7:44:52
Dans la boucle principale du main, je ferai seulement afficher les barres et c'est la que je pourrais rajouter les différentes options (fermer fenêtre, augmenter/ralentir la vitesse,...). Le processus de tri serait délocalisé, c'est très intéressant !
Cependant, comment faire pour faire tourner ce fichier ou processus en même temps que le main ? Comment le démarrer, l'arrêter.... ? Parce que j'ai conscience que ce ne sera pas une simple fonction ou procédure mais bien un fichier à part
Un deuxième main ?? (Je doute que cela soit possible)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent