J'ai besoin de remplir un grand ensemble de données (peut-être pas beaucoup - plusieurs milliers d'entrées) vers un Gtk :: TreeModelColumn. Comment puis-je faire cela sans bloquer l'application. Est-il sûr de mettre le traitement dans un fil séparé? Quelles parties de l'application dois-je protéger avec une serrure alors? Est-ce seulement la classe Gtk :: TreemodelColumn, ou le widget Gtk :: TreeView dans lequel il est placé, ou peut-être même entoure le cadre ou la fenêtre?Comment remplir Gtk :: TreeModelColumn avec un grand ensemble de données sans verrouiller l'application
Répondre
Il existe deux approches générales possibles. (Disclaimer: J'ai essayé de fournir un exemple de code, mais j'utilise rarement gtkmm - Je suis beaucoup plus familier avec GTK en C. Les principes restent les mêmes, cependant.)
Un est d'utiliser un idle function - que s'exécute chaque fois que rien ne se passe dans votre interface graphique. Pour de meilleurs résultats, effectuez une petite quantité de calculs dans la fonction inactive, comme ajouter un élément à votre vue arborescente. Si vous renvoyez true
à partir de la fonction inactive, elle est appelée à nouveau chaque fois que le temps de traitement disponible est plus long. Si vous renvoyez false
, il n'est pas appelé à nouveau. La bonne chose à propos des fonctions inactives est que vous n'avez rien à verrouiller. Ainsi, vous pouvez définir votre fonction de veille comme ceci:
bool fill_column(Gtk::TreeModelColumn* column)
{
// add an item to column
return !column_is_full();
}
commencer ensuite le processus comme celui-ci:
Glib::signal_idle().connect(sigc::bind(&fill_column, column));
L'autre approche consiste à utiliser les threads. Dans l'API C, cela impliquerait gdk_threads_enter()
et des amis, mais je suppose que la bonne façon de faire cela dans gtkmm, est d'utiliser Glib::Dispatcher
. Je ne l'ai pas utilisé auparavant, mais here en est un exemple. Cependant, vous pouvez toujours utiliser l'API C avec gtkmm, comme indiqué here.
- 1. Recherche dans un grand ensemble de données
- 2. Comment copier un grand ensemble de données dans SQLServer db
- 3. Comment puis-je rechercher un grand ensemble de données XML?
- 4. Comment remplir un ensemble Delphi?
- 5. Comment hacher un grand objet (ensemble de données) en Python?
- 6. Démarrage NLP - Python + grand ensemble de données
- 7. Grand ensemble de données et AddressAddressBookCopyArrayOfAllPeople
- 8. Commandes GridView sur un grand ensemble de données
- 9. System.OutOfMemoryException utilisant C# sur un grand ensemble de données
- 10. Ensemble de dessins gtk background image
- 11. Outil pour remplir un ensemble de données .Net avec des données
- 12. groupe grand ensemble d'images
- 13. créer et de travailler avec un grand ensemble de données bidimensionnel dans android
- 14. Comment faire une boucle dans un grand ensemble de données en python sans avoir besoin d'une erreur MemoryError?
- 15. SELECT IN pour un grand ensemble
- 16. Remplir l'application Django avec des données en utilisant un très grand script Python
- 17. Comment remplir listview avec beaucoup d'informations sans bloquer?
- 18. Comment remplir un objet Cmd avec un sous-ensemble de propriétés de la classe Domain?
- 19. Comment traiter un grand nombre de requêtes ajax sans raccrocher?
- 20. comment récupérer à plusieurs reprises une certaine quantité de données d'un grand ensemble de données?
- 21. Le moyen le plus rapide pour stocker un grand ensemble de données (C# ASP.net)
- 22. J'ai besoin d'une approche pour travailler avec de petits sous-ensembles d'un grand ensemble de données
- 23. Classement en MySQL, comment obtenir les meilleures performances avec des mises à jour fréquentes et un grand ensemble de données?
- 24. Comment puis-je remplir un jeu de données avec des données d'un IQueryable?
- 25. Envoi de données dans un rappel GTK
- 26. Services Web avec un grand volume de données
- 27. Dans un grand hachage Perl, comment extraire un sous-ensemble de clés particulières?
- 28. Afficher un grand ensemble de données dans une table/Démarrer une nouvelle colonne après X lignes
- 29. git-svn sur un grand sous-ensemble de repo svn
- 30. utilisation batik-rastérisation sans GTK
Le contenu est-il généré de manière dynamique lors de l'exécution du programme? Sinon, vous pourriez avoir l'objet 'TreeModelColumn' pré-calculé au début. –
non, le contenu est généré dynamiquement –