Y a-t-il une différence de performances lorsque le multi-thread est développé avec des objets d'événement win32 (CreateEvent) ou avec une file d'attente de messages de la fenêtre de threads. Les deux devraient utiliser une sorte d'appel WaitFor .... Mon propre code presque entièrement basé sur l'événement, mais peut-être que je perds quelque chose quand n'utilisez pas les messages.multithreading: piloté par les événements vs piloté par les messages
Répondre
Si vous êtes préoccupé par la différence de performances entre les messages de thread et les événements du noyau, vous ne devriez probablement pas utiliser les messages de threads.
Les files d'attente de messages Win32 sont un mécanisme développé à l'origine pour Windows 16 - lorsqu'il n'y avait pas de threads. Ils ont grandi pour gérer le modèle de filetage de Win32, mais sous les couvertures, ce sont des bêtes plutôt complexes.
Cela a des avantages et des inconvénients. Les inconvénients sont, tout simplement, qu'ils sont plus lents, et ont beaucoup plus de limites, que d'autres formes de synchronisation inter-thread et de communication. Pour commencer, parce que beaucoup de morceaux de code Windows (MessageBox, DoDragDrop etc) implémentent des boucles de messages modales - il y a beaucoup de fois où les messages de threads peuvent être perdus. Il est important de ne pas utiliser ces API à partir de threads destinés à recevoir des messages de threads. ** 1 * Il existe également des limites à la taille d'une file d'attente avant qu'elle ne lâche des messages et les API de messagerie de threads (GetMessage) provoque l'entrée du thread dans un état d'alerte (vous ne pouvez donc pas utiliser QueueUserAPC).
Les messages pro 'for thread sont - tant que leurs limites sont respectées - ils sont une roue pré-faite très fiable qui sérialise les appels à un thread. Si vous vous trouvez à implémenter un mécanisme de mise en file d'attente pour un thread de travail non UI, pourquoi réinventer une roue bien testée - utilisez la file d'attente de messages préconstruite.
** 1 * Ceci inclut la plupart des implémentations de macro de débogage comme ASSERT qui feront apparaître une boîte de message.
- 1. Développement piloté par les tests: asp.net mvc
- 2. Personnalisez un TableView piloté par les données
- 3. Développement piloté par test (TDD) avec Rails
- 4. Un exemple de code d'interface utilisateur piloté par les métadonnées?
- 5. Développement piloté par les tests: Inversion de contrôle (IOC)
- 6. Qu'est-ce que le développement piloté par les tests?
- 7. À quoi sert le développement piloté par les modèles?
- 8. «Développement piloté par les tests» Refactoring Design Complexity
- 9. Objets factices - Méthode d'installation - Développement piloté par les tests
- 10. Développement piloté par test d'une tâche MSBuild
- 11. Menu piloté par la base de données d'applications Web MVC par les autorisations utilisateur
- 12. Sécurisation de l'adaptateur de canal piloté par message JMS
- 13. Développement piloté par les tests avec ASP.NET MVC - par où commencer?
- 14. Tri des données lors d'un développement piloté par domaine
- 15. qu'est-ce qu'un serveur web piloté par événement
- 16. Développement piloté par test pour le composant C++ XPCOM?
- 17. Comment organiser un projet de conception piloté par domaine?
- 18. Jquery Load onclick système de personnalisation piloté par données
- 19. Création d'un calendrier piloté par MSSQL dans .NET C#
- 20. Aide du menu CSS piloté par base de données
- 21. Développement piloté par les tests: Rédaction de tests pour les variables privées/protégées
- 22. Développement piloté par les tests pour les méthodes complexes impliquant une dépendance externe
- 23. Quelles sont les bonnes introductions en ligne aux tests et au développement piloté par les tests?
- 24. ASP.NET MVC - Menu piloté par base de données
- 25. windows.forms Cadre d'application piloté par base de données
- 26. Comment intégrer DATEJS dans un formulaire piloté par PHP?
- 27. asp.net Menu de navigation piloté par base de données MVC
- 28. Développement piloté par domaine en C# - exemple d'application Web
- 29. Construire un site web piloté par AJAX en utilisant Codeigniter
- 30. Comment mettre en œuvre un développement piloté par les tests avec du code existant?