2010-09-14 6 views
5

Je me demande comment implémenter un appel asynchrone en C++ standard. J'ai un programme de traitement image/vidéo et je veux ajouter une autre fonction/fonction, mais je voudrais qu'elle soit exécutée dans un autre thread ou qu'elle soit exécutée de manière asynchrone avec le thread d'origine.Threads asynchrones en standard C++

Je veux juste informer le thread principal quand quelque chose s'est passé dans ce nouveau thread. (Cela n'arrive pas toujours et il n'y a pas de raison pour que le thread principal attende la fin de ce nouveau processus, donc je préfère un appel asynchrone, si c'est plus simple que la programmation multithread)

J'espère que je suis dans le bon chemin.

Merci d'avance.

Ignacio.

MISE À JOUR: Actuellement, je n'utilise pas encore de bibliothèque de threads car jusqu'à présent je n'en avais pas besoin. Je pensais à Boost ... est-ce une bonne idée? Où devrais-je commencer Si je veux me mettre au travail des appels asynchrones?

+3

Norme actuelle ou C++ 0x? La norme actuelle n'a pas de support pour les threads, et la réponse doit être en termes de bibliothèque de choix. –

+1

Si vous voulez une librairie de threads portable avec une belle interface C++ pour les futures, alors boost est un bon choix. –

Répondre

6

La norme C++ actuelle ne définit pas une telle chose, mais C++ 0x le fait. Cela laisse quelques choix. Le plus propre est probablement d'utiliser une implémentation en cours qui inclut la classe C++ future (et les parents). Cela semble être exactement le genre de chose que vous cherchez. Selon le compilateur que vous utilisez, le support peut déjà être empaqueté (par exemple, je crois qu'il est normalement inclus dans gcc 4.5), ou vous pouvez avoir besoin de la version Boost (bien que je ne pense pas que cela fasse partie de la version officielle) Boost release - vous devez regarder dans la voûte). Sinon, vous pouvez faire quelque chose par vous-même en générant un pool de threads et en lui soumettant une tâche. Si vous décidez de, mon conseil serait de suivre l'interface standard pour un future aussi étroitement que possible; Il est presque inévitable qu'à un certain moment, vous aurez des contrats à terme disponibles, et préférez probablement les utiliser au lieu de maintenir votre propre version.