Rechercher : dans
Par :

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

Dernière réponse le 27 jan 2009 à 10:01:02 drazx974, le 8 jan 2009 à 13:13:11 
 Signaler ce message aux modérateurs

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.


Configuration: Linux Fedora
Firefox 3.0.4

Meilleures réponses pour « [C/C++/GTK]Barre de progression et boutons » dans :
La saisie sécurisée en C++ VoirLa saisie sécurisée en C++ 1. Sécuriser ses saisies grâce à la méthode "get()" 2. Sécuriser ses saisies grâce à la méthode "getline()" 3. Mince, ça marche pas... 4. La méthode "ignore()" Dans vos programmes, vous avez...
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Introduction à la programmation des CGI VoirPrésentation de l'interface CGI Un script CGI (Common Gateway Interface, traduisez interface de passerelle commune) est un programme exécuté par le serveur web (on dit généralement « côté serveur »), permettant d'envoyer au navigateur de...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Les structures en langage C VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...

1

Char Snipeur, le 8 jan 2009 à 14:03:02

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. Salutation !
Char Snipeur

Répondre à Char Snipeur

2

drazx974, le 9 jan 2009 à 05:34:03

C'est pire, avec le sleep il fige. Comment on utilise un thread en C ?

Répondre à drazx974

3

drazx974, le 9 jan 2009 à 05:39:05

PS: Comment on change le titre du sujet ? J'aimerais le mettre en "[GTK/C]Problème barre de progression"

Répondre à drazx974

4

Char Snipeur, le 9 jan 2009 à 09:00:31

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 Salutation !
Char Snipeur

Répondre à Char Snipeur

5

drazx974, le 23 jan 2009 à 08:13:06

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é.

Répondre à drazx974

6

Char Snipeur, le 23 jan 2009 à 08:59:09

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 ? Salutation !
Char Snipeur

Répondre à Char Snipeur

7

 drazx974, le 27 jan 2009 à 10:01:02

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.

Répondre à drazx974