Le concept de lock-free programming est vraiment intéressant : empêcher les possibilités de blocages, ou les erreurs lors de l'utilisation d'une mémoire partagée entre plusieurs threads. L'idée étant de ne pas utiliser de mutex, et soit de séquentialiser l'accès à la mémoire partagée, soit d'utiliser des petites opérations atomiques (qui seront exécutée sans interruptions).
Il n'est pas tellement vraisemblable de créer un gros programme lock-free, l'idée est plutôt de rester pragmatique et de faire interagir plusieurs parties lock-free entres elles.
Le gain en performance par rapport à des mutex est assez flagrant. Et c'est à mettre en place pour coder efficacement sur du multi-processeur. Mais les compétences pour une mise en œuvre correcte sont aussi plus grandes.
"So keep mutexes, unless you have a lot of lock contention or are looking for a challenge."
Une autre ressource sur le sujet :
http://woboq.com/blog/introduction-to-lockfree-programming.html
Et comment gérer des opérations atomiques en Qt :
http://qt-project.org/doc/qt-5/qatomicint.html
"When you move a parent QObject, all its children are automatically moved too.
Remember though that member variables do not automatically become children; the parent-child relationship must be set by either:
J'ai comme le sentiment que cette remarque devrait être beaucoup plus visible dans les tutoriels sur les threads Qt !!!
Une définition assez claire de "thread-safe" et "reentrant".
Excellente explication sur la GUI Qt (widgets) : fenêtre, dock, etc...
Ok, je crois que je vais me coltiner ça.
Apparement, voici la liste des DLL nécessaires pour faire tourner un programme sous Qt5 :
Des bibliothèques (et exemples d'applications) sous Qt pouvant s'avérer utiles à l'occasion.
En attendant de détailler mes bidouilles, ou de tester des bibliothèques tierces, voici au moins un petit état de l'art de ce que j'ai trouvé pour dessiner des graphiques / courbes / histogrammes en Qt.
Utilisation avancée de qmake, notamment la gestion des variables. Voilà ce que je cherchais depuis quelques temps...
Du coup, j'en ai fait un article :-) J'en profite pour ajouter pas mal d'autres erreurs que j'ai rencontré avec les signaux / slots de Qt.
Arg, pour connecter un QObject qui a été forward declared (class MyQObject dans le .h de l'utilisateur), il ne faut pas oublier d'inclure réellement le .h du QObject (dans le .cpp de l'utilisateur) pour éviter l'erreur à la compile : "No matching function for call to connect".
Ne jamais, JAMAIS (jamais !) créer la méthode "connect" dans un QObject en Qt !
Je comprends enfin pourquoi ce fichu signal ne voulait pas se connecter à ce sacré slot ! Eh bah voilà : une méthode "connect" (censée, je cite, "Start the connection to the remote server") qui surcharge bien malencontreusement la méthode "QObject::connect" ce qui nous donne "error : no matching function for call to 'MyGreatObject::connect(AnOtherObject&, const char, MyGreatObject const, const char)'".
C'est bête hein ?
Rah!
QString de Qt : "Tant que l'objet est copié, passé en paramètre, .... l'objet n'est pas dupliqué (tous les objets pointes vers le même espace mémoire)."
Eh je ne savais pas que QString était un QSharedDataPointer ! Bien !
Pourquoi n'est-ce pas le cas des String en Java ? Sur un gros projet auquel je participe, des devs se sont "amusés" à concaténer crapuleusement des String Java. Et hop, une nouvelle instance de String à chaque fois ! La mémoire globale le ressent... et franchement, on n'avait pas besoin de ça !