Je construis un programme C ++, sous Windows, en utilisant Visual Studio. Il s’appuie sur une API de base COM, qui envoie un message Windows pour notification.
Pour traiter ces messages, je vois deux possibilités:
Je ne sais pas ce qui est le meilleur, ou s’il y a une autre façon de traiter les messages (il y a probablement une fonction Windows qui peut lancer la boucle)
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0) { if (bRet == -1) { // handle the error and possibly exit } else { TranslateMessage(&msg); DispatchMessage(&msg); } }
Ce n’est pas juste pour votre propre bénéfice, COM vous oblige à créer une boucle de message. COM en a besoin pour gérer les serveurs COM avec threads d’appartements, un terme coûteux pour les “composants qui ne prennent pas en charge le multi-threading”. La grande majorité d’entre eux ne le font pas.
Il est préférable de créer une fenêtre, elle ne doit pas nécessairement être visible. Cela vous donne un HWND que vous pouvez utiliser dans vos appels SendMessage (). La procédure de fenêtre que vous écrivez peut traiter les messages. De là, il devient facile de créer une interface utilisateur minimale, avec Shell_NotifyIcon par exemple. Toujours agréable lorsque vous pouvez afficher une notification en cas de problème. Tant mieux qu’un événement dans un journal que personne ne regarde jamais.
Oui, vous pouvez. Chaque thread peut avoir une boucle de message et vous n’avez besoin d’aucune fenêtre pour recevoir des messages ou les envoyer (voir PostThreadMessage
).
Il n’y a rien de mal à utiliser cette méthode si votre application est pilotée par des événements.