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

Résolu/Fermé
drazx974 Messages postés 48 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 13 octobre 2009 - 8 janv. 2009 à 13:13
drazx974 Messages postés 48 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 13 octobre 2009 - 27 janv. 2009 à 10:01
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.


A voir également:

7 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
8 janv. 2009 à 14:03
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 mardi 16 décembre 2008 Statut Membre Dernière intervention 13 octobre 2009 8
9 janv. 2009 à 05:34
C'est pire, avec le sleep il fige. Comment on utilise un thread en C ?
0
drazx974 Messages postés 48 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 13 octobre 2009 8
9 janv. 2009 à 05:39
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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
9 janv. 2009 à 09:00
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 mardi 16 décembre 2008 Statut Membre Dernière intervention 13 octobre 2009 8
23 janv. 2009 à 08:13
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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
23 janv. 2009 à 08:59
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 mardi 16 décembre 2008 Statut Membre Dernière intervention 13 octobre 2009 8
27 janv. 2009 à 10:01
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