Question

Je joue actuellement avec la bibliothèque des agents asynchrones dans Microsoft Exécution de la concurrence. Je n'ai pas encore trouvé de moyen évident de signaler qu'une tâche est terminée en utilisant des messages de fenêtre, ou d'autres moyens de notifier le thread d'interface utilisateur que le travail est terminé.

Je sais que je peux passer les poignées de fenêtre et les valeurs de message (WM_xxx) le long des tâches, et utilisez la tâche PostMessage() Pour signaler le thread d'interface utilisateur. C'est un peu laid à mon avis et une source d'erreur. Si une exception se produit, je dois avoir un gestionnaire de captures qui signale mon fil d'interface utilisateur. Ceci est facilement oublié, et la condition d'exception peut ne pas être exécutée très souvent, il est donc difficile de le repérer.

La documentation explique comment remettre les données vers le thread d'interface utilisateur. Il n'utilise pas les messages de fenêtre, mais les techniques d'interrogation. Je trouve idiot de configurer des minuteries pour interroger si une tâche s'est terminée, lorsqu'il existe des méthodes "interrompues" disponibles!

C'est un peu étrange que cela ne soit pas intégré à la bibliothèque, car ce n'est pas une bibliothèque transformatrice. Il est conçu pour fonctionner sur Windows et Windows uniquement, à partir de ce que je comprends.

Les fonctionnalités sont-elles disponibles dans la bibliothèque, ou dois-je faire la main à la main?

Était-ce utile?

La solution

Vous pouvez créer un thread de moniteur en fonction unique de surveiller un non-libellé pour un message Windows et de répartir ce message de manière appropriée. Demandez à vos agents de connaître ce tampon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top