2010-12-09 53 views
0

Disons que j'ai une instruction switch dans ma fonction thread qui évalue les événements déclenchés. Chaque cas est un événement différent. Est-il préférable de mettre l'appel à ResetEvent à la fin de l'affaire, ou au début? Il me semble que ça devrait aller à la fin, pour que l'événement ne puisse plus être déclenché, tant que le thread n'a pas fini de traiter l'évènement précédent. Si elle est placée au début, l'événement pourrait être déclenché à nouveau, en cours de traitement.Réinitialisation des événements filetés - C++

Répondre

1

Oui. pense que c'est le chemin à parcourir. Créez un événement de réinitialisation manuelle (deuxième paramètre de l'API CreateEvent) afin que l'événement ne soit pas automatiquement réinitialisé après son réglage.

1

Si vous gérez le trafic entrant à l'aide d'un seul objet Event (ce qui implique que vous n'avez aucune file d'attente entrante), les événements vous manqueront. Est-ce vraiment ce que tu veux?

Si vous voulez attraper tous les événements, une file d'attente complète de producteur-consommateur serait un meilleur pari. Implémentation de référence pour Boost.Thread here.

Un problème qui vient le temps et à nouveau avec le code multi-thread est comment pour transférer des données d'un fil à un autre . Par exemple, d'une manière commune à paralléliser un algorithme de série est de le diviser en morceaux indépendants et faire un pipeline - chaque étape le pipeline peut être exécuté sur un fil séparé, et chaque étape ajoute les données à la file d'attente d'entrée pour la prochaine étape quand c'est fait. Pour que cela fonctionne correctement, la file d'entrée doit être écrite afin que les données puissent être ajoutées en toute sécurité par un thread et supprimées par sans corrompre la structure de données .