Partager via


Fonctions asynchrones définies par l’utilisateur (traduction automatique)

Dernière modification : mercredi 13 janvier 2010

S’applique à : Excel 2010 | Office 2010 | VBA | Visual Studio

Dans cet article
Quand utiliser des fonctions définies par l'utilisateur asynchrones
Écriture d'une fonction définie par l'utilisateur asynchrone

Important

Cet article a été traduit automatiquement, voir l’avertissement. Vous pouvez consulter la version en anglais de cet article ici.

Microsoft Excel 2010 peut appeler de manière asynchrone des fonctions définies par l’utilisateur. L’appel asynchrone des fonctions peut améliorer les performances en autorisant l’exécution simultanée de plusieurs calculs. Lorsque vous exécutez des fonctions définies par l’utilisateur sur un cluster de calcul, le fait d’appeler les fonctions de manière asynchrone permet d’utiliser plusieurs ordinateurs pour effectuer les calculs.

Quand utiliser des fonctions définies par l'utilisateur asynchrones

Certaines fonctions définies par l'utilisateur doivent attendre les ressources externes. Lorsqu'ils en attente, le thread de calcul Excel est bloqué. Dans Excel 2010, les fonctions définies par l'utilisateur peuvent exécuter de façon asynchrone. Cela permet de libérer le thread de calcul pour exécuter d'autres calculs pendant que la fonction définie par l'utilisateur en attente.

Dans Excel 2007, les programmeurs pourraient exécuter plusieurs fonctions définies par l'utilisateur en même temps en augmentant le nombre de threads utilisés dans plusieurs thread recalculs. Cette méthode présente des inconvénients principalement parce que le nombre de threads est un paramètre de portée limitée à une application et ne peut être contrôlé au niveau d'une fonction unique ou une macro complémentaire.

Les programmeurs doivent utiliser des appels de fonction définie par l'utilisateur asynchrone lorsque la fonction doit attendre les ressources externes. Par exemple, une fonction qui envoie une demande SOAP via Internet doit attendre le réseau remettre la demande, le serveur distant pour terminer la demande et le réseau pour renvoyer le résultat. Dans ce cas, il n'existe aucun produit informatique significative et Excel peut continuer à d'autres calculs.

Les programmeurs peuvent utiliser également des fonctions asynchrones définis par l'utilisateur une fonction de transmettre des demandes vers un cluster de calcul. Dans ce cas, il n'est pas uniquement la latence réseau à attendre, mais le cluster peut exécuter des appels séparés sur des serveurs distincts. Sans attendre que chaque appel à la fin, les appels peuvent être superposés pour améliorer les performances. Dans certains cas, cette amélioration est importante.

Notes

Fonctions définies par l'utilisateur ne peut pas être inscrit en tant que toutes les deux asynchrones et sans échec du cluster.

Écriture d'une fonction définie par l'utilisateur asynchrone

Asynchrones fonctions définies par l'utilisateur doivent suivre une poignée et utiliser ce handle en informant Excel que l'appel de fonction est terminée. Une fonction définie par l'utilisateur asynchrone est divisée en deux. La première partie est le point d'entrée standard UDF, qui lance une opération asynchrone de la deuxième, distincte. Rappels dans Excel doivent être effectuées pendant le point d'entrée UDF. La première partie de lancement de la fonction retournera ensuite le contrôle de son thread de calcul vers Excel, qui continue de calcul. Lorsque la deuxième opération asynchrone est terminée, il doit effectuer un rappel dans Excel et offrir à Excel par son résultat.

Notes

Tous les arguments transmis dans le fichier UDF qui sont nécessaires à la partie asynchrone la fonction doit être approfondie copié, car Excel libère ces arguments lorsque le point d'entrée UDF est retournée.

Excel fournit un ensemble d'événements qu'une macro complémentaire XLL peut utiliser afin de gérer le cycle de vie des appels asynchrones de FDU. Ces événements indiquent que Excel est terminée avec des calculs ou que le calcul a été annulé.

Déclarer une fonction asynchrone

Vous devez déclarer des fonctions définies par l'utilisateur asynchrones comme asynchrone lorsqu'ils sont enregistrés. Ceci est effectué en ajoutant un paramètre qui pointe vers une structure XLOPER12, représenté par « X » dans la chaîne de type d'enregistrement, de n'importe où dans la liste des paramètres de la FDU. Excel utilise ce paramètre pour transmettre le handle d'appel asynchrone. La macro complémentaire XLL doit subir le handle d'appel asynchrone et le résultat de la fonction dans Excel lorsque le résultat est prêt. En outre, le type de retour de la FDU doit être void, désigné par « > » en tant que le premier caractère de la chaîne de type. Le type de retour est void, car la partie de la FDU synchrone ne retourne pas une valeur vers Excel. Au lieu de cela, la macro complémentaire XLL renvoie une valeur en mode asynchrone via un rappel.

Vous pouvez déclarer des fonctions asynchrones comme thread-safe, puis la partie synchrone de la FDU est utilisée dans un recalcul multi-thread.

L'exemple de code suivant montre une fonction définie par l'utilisateur asynchrone inscrite à l'aide "> QX » comme chaîne de type d'enregistrement :

void MyAsyncUDF(LPXLOPER12 arg1, LPXLOPER12 pxAsyncHandle)
{
…
}

Le renvoi de valeurs

Lorsque le résultat de l'appel asynchrone est prêt, la macro complémentaire XLL renvoie le résultat vers Excel en effectuant un rappel de type xlAsyncReturn (traduction automatique).

xlAsyncReturn est le rappel seulement que vous pouvez utiliser sur des threads non calcul lors d'un recalcul. Par conséquent, la partie asynchrone d'une fichier UDF asynchrone ne doit pas effectuer les autres rappels.

gestion des événements

À partir de Excel 2010, les XLL peuvent recevoir des événements conçus pour gérer le cycle de vie de fonction asynchrone. Pour plus d'informations, consultez Handling Events.

Notes

Avertissement traduction automatique : cet article a été traduit par un ordinateur, sans intervention humaine. Microsoft propose cette traduction automatique pour offrir aux personnes ne maîtrisant pas l’anglais l’accès au contenu relatif aux produits, services et technologies Microsoft. Comme cet article a été traduit automatiquement, il risque de contenir des erreurs de grammaire, de syntaxe ou de terminologie.

Voir aussi

Concepts

Développement de XLL Excel 2010 (traduction automatique)