Bonjour,
je suis en train de réaliser une interface GTK+ pour visualiser en temps-réel un traitement sur une séquence d'image. Le traitement est effectué dans une boucle dans un GThread, afin de garder la main sur l'interface en même temps. Je désire donc pouvoir afficher chaque image traitée 1 et 1 seule fois dans un GtkDrawingArea. Là se pose deux problèmes :
Afficher 1 seule fois chaque image :
Si je place un gtk_widget_queue_draw à la fin de chaque traitement dans le thread, il arrive qu'au bout d'un moment le GtkDrawingArea ne soit plus mis à jour (bloqué sur une image, alors que le traitement continue derrière), à moins de le "forcer" en le redimensionnant.
J'y ai remédié en appelant gtk_widget_queue_draw depuis une fonction idle, mais du coup il y a énormément de rafraichissements inutiles.
Afficher toutes les images :
Parfois le traitement est tellement rapide que le temps d'afficher une seule image, il y en a plusieurs qui ont été traitées et ne seront donc jamais affichées.
J'ai essayé de placer des G_LOCK / G_UNLOCK aux niveaux du traitement et de l'affichage, dans le but de ne pas effectuer un nouveau traitement tant que l'affichage du résultat précédent n'ait été achevé. En réalité je me retrouve avec une image sur 50 qui s'affiche... Peut-être les G_LOCK ne fonctionnent-ils que dans les GThreads et pas dans les signaux.
J'aimerais savoir s'il existe un moyen de vérifier que l'affichage est terminé, un peu à la manière d'un g_thread_join qui permet d'attendre la fin de l'exécution d'un thread, avant de poursuivre le traitement.
Merci,
BVertut
Partager