2009-03-06 7 views
0

J'ai récemment découvert la classe CThreadPool d'ATL et j'étais très heureux de cette découverte. C'est une petite classe soignée qui s'occupera de la sémantique de la syncronisation d'avoir plusieurs threads de travail pour traiter une file d'attente de tâches à faire. Les tâches sont transmises à l'objet CThreadPool, par un processus extrnal.Quel est le meilleur moyen de transférer des informations d'erreur à partir des threads de travail sous CThreadPool?

Supposons maintenant l'un des threads de travail rencontre une erreur, ou a une exception. Je ne parle pas du type d'exceptions où vous voudriez que l'ensemble de votre demande meure, mais c'est quelque chose que vous voulez faire avec plus de grâce. Par gracieusement, je veux dire que l'application peut mourir, mais je dois faire un peu de travail de nettoyage et de mettre un message de l'acheteur quelque part pour expliquer pourquoi.

Quelle est la meilleure façon de transférer les informations d'erreur (message, code d'erreur, la source, etc.) pour le thread principal propriétaire de l'objet CThreadPool?

Répondre

2

Si je travaillais avec ce système, je postMessage de la tâche erronée avec un événement personnalisé que le gestionnaire de messages de votre application peut répondre. Vous devriez regrouper toutes les informations dont vous avez besoin afin de nettoyer correctement.

1

Utilisation file d'attente avec un accès de synchronisation pour l'enregistrement de toutes les erreurs et du fil pour des événements à la consommation à la file d'attente.