[C/C++/GTK]Barre de progression et boutons

Résolu
drazx974 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   -  
drazx974 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je souhaiterais pouvoir garder la main sur mon interface pendant la boucle d'itération de la barre de progression.
Je programme en C/C++ avec l'API GTK+.

	gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(n->progress), 0.0);
	
	gtk_grab_add(n->bouton_annuler);
	
	while(true)
	{		
		gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(n->progress), dFraction);
		gtk_main_iteration ();
               
               /** ---------------  LE TRAITEMENTS -------------- **/

		if(/* TRAITEMENT TERMINE */)
		{
			gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(n->progress), 1.0);
			gtk_main_iteration ();

			break;
		}
	}

	gtk_grab_remove(n->bouton_annuler);


Dans le tuto c'est pourtant bien avec le gtk_main_iteration() et le gtk_grab_add/remove() qu'ils procèdent.
Peut-être que j'ai raté quelque chose ou qu'il y a une autre solution.


7 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Je ne connait pas GTK, mais sauf si tu lance un thread c'est normal.
gtk_main_iteration le fait il ?
Si oui, il faut alors mettre un sleep dans ta boucle.
Si non, il faut en faire un, pour que la boucle s'exécute en parallèle du reste du code.
0
drazx974 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   8
 
C'est pire, avec le sleep il fige. Comment on utilise un thread en C ?
0
drazx974 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   8
 
PS: Comment on change le titre du sujet ? J'aimerais le mettre en "[GTK/C]Problème barre de progression"
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Je crois qu'on ne peux pas changer le titre.
Je pense que pour faire des thread, si GTK est similaire à QT, tu doit avoir des outils qui le font simplement.
J'utilise la bibliothèque C pthread pour les thread en C, elle est facile d'utilisation est bien documenté.
man pthread_create
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
drazx974 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   8
 
je m'arrache les cheveux avec cette histoire.
ni la solution des tutos ni pthread n'a résolu le problème.
Les deux font exactement la même chose, je peux cliquer sur mon bouton mais la commande prend effet seulment après que ma barre de progression soit terminé.

Résultat rien n'a changé.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Tu as peut être un sleep trop court.
as tu bien penser ton truc pour que les deux s'exécutent simultanément ?
As tu bien créé un thread détacher ?
0
drazx974 Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   8
 
J'ai trouvé la solution avec mon prof.
En fait ma fonction du bouton annuler qui porte le même nom contient l'appel à la fonction gtk_main_quit() qui ne s'éxécute pas pendant que la barre de progression se charge et attend qu'elle est terminé pour s'éxectuer.

Donc voilà en fait mon code était correcte mais je n'avais pas d'autre boutons avec callbacks pour pouvoir tester.

Se qu'il faut retenir c'est que certaines fonctions gtk ne s'éxectuterons PAS PENDANT une boucle qui charge la barre de progression, mais seulement quand elle se termine.
0