Bonjour,
Comment passer un programme MFC en multi coeurs ?
Merci
cjacquel
Bonjour,
Comment passer un programme MFC en multi coeurs ?
Merci
cjacquel
Bonjour,
Les MFC donc vraisemblablement sous Windows; Windows est compatible multicœurs depuis quelques années déjà, et les applications utilisant les MFC fonctionnent, donc les MFC sont utilisables dans un environnement multicœurs sans aucune intervention.
Le multicœurs permet essentiellement un multi-threading plus performant qu'un monocœur.
Maintenant est-ce que les MFC utilisent optimalement le multi-theading? Là évidemment non.
Les MFC s'appuient sur
- Win32 qui est compatible multi-threading, mais aide peu (par exemple, les objets graphiques sont normalement ré-entrant)
- Le langage C++ qui est compatible multi-threading, mais n'est pas pas un langage intégrant implicitement le parallélisme. Il faut utiliser des threads ou des outils spéciaux (OpenMP, etc...)
- La bibliothèque STL du C++ qui a des versions compatibles multi-threading et des objets pour le gérer (std::thread, std::async, ExecutionPolicy, ...)
Il faut commencer par vérifier que la bibliothèque est bien multi-thread (depuis récemment toutes le sont sous Windaube), ensuite on peut effectuer des traitements dans des threads, le système exécutera ces threads dans des cœurs différents. Les MFC devraient fonctionner, les problèmes de ré-entrance et de protection de ressources sont à suivre de la même manière que pour tout objet du langage.
Le problème des MFC, c'est que c'est une surcouche de la bibliothèque winapi (ou Win32) ... bibliothèque des années 90-95 et que Microsoft tente de remplacer depuis plus de 10 ans.
Le problème c'est qu'elle(s) est (sont) très bas niveau et qu'il faut:
- tout faire à la main: gestion des threads, gestion du réseau, gestion des notifications applications, ...
- dépendre de composants plus ou moins bien codés lorsqu'ils existent: parseur JSON ou XML, intégration d'une vue web HTML 5, ...
Sans parler de la prise de tronche pour bien gérer:
- l'écran: réduire/ supprimer les scintillements, gérer une transparence partielle, virer ces bitmaps, ... 90-95 c'était l'époque des cartes graphiques 2D - avec une palette de couleurs
- les entrées claviers: les évènements keyup, keypress et keyrelease qui se marchent de temps en temps sur les pieds et que Windows aussi gère certaines touches
Et enfin, j'ai vu passer dans la bible MFC (de Charles Petzold) que la bibliothèque MFC est une bibliothèque objet et certaines méthodes non documentées étaient de temps en temps nécessaire pour bien gérer la mémoire ( )
Et pour finir, attends-toi de plus en plus à
- utiliser les nouvelles API de Windows: gestion des droits, gestion des dossiers spécifiques, ...
- subir/ adopter la nouvelle politique de Microsoft depuis Windows 8: la fonction getversion dépréciée, ton application ne fonctionne plus sous Windows XP, ...
Et notamment , les condition variables pour la gestion des threads. (<- lien MSDN)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager