[API]Fonctions en parallèle
2 participants
Page 1 sur 1
[API]Fonctions en parallèle
Bonjour,
En codant, il m'est arrivé à plusieurs reprises d'avoir besoin de faire tourner des fonctions en parallèle, ne serait-ce que pour attendre une réponse tout en faisant une action. C'est pourquoi l'API parallel existe sous CC, mais elle a une grosse limitation: l'impossibilité de donner des arguments à nos fonctions. On peut contourner le problème, mais afin d'avoir une solution à peu près élégante, j'ai réalisée cette petite API. Basiquement, à partir de l'API parallel de base, cette API rajoute deux fonctions principales: waitForAny et waitForAll.
En codant, il m'est arrivé à plusieurs reprises d'avoir besoin de faire tourner des fonctions en parallèle, ne serait-ce que pour attendre une réponse tout en faisant une action. C'est pourquoi l'API parallel existe sous CC, mais elle a une grosse limitation: l'impossibilité de donner des arguments à nos fonctions. On peut contourner le problème, mais afin d'avoir une solution à peu près élégante, j'ai réalisée cette petite API. Basiquement, à partir de l'API parallel de base, cette API rajoute deux fonctions principales: waitForAny et waitForAll.
- synchro.waitForAny:
- waitForAny(function1,...) fonctionne exactement comme parallel.waitForAny, exceptée qu'elle prend en argument une fonction suivi de son ou ses arguments, de la manière suivante: l'argument suivant function1 doit être soit une table numérotée comprenant les arguments à appliquer à function1, soit l'argument à appliquer à function1 si ce n'est pas une table ou une fonction, soit function2 si function1 ne prend pas d'argument.
waitForAny retourne au moins un résultat: le numéro de la fonction s'étant arrêtée en premier. Si cette fonction a retourné un ou plusieurs résultats, ils sont renvoyés à la suite de celui-ci.
- synchro.waitForAll:
waitForAll(function1,...) fonctionne exactement comme parallel.waitForAll, exceptée qu'elle prend en argument une fonction suivi de son ou ses arguments, de la manière suivante: l'argument suivant function1 doit être soit une table numérotée comprenant les arguments à appliquer à function1, soit l'argument à appliquer à function1 si ce n'est pas une table ou une fonction, soit function2 si function1 ne prend pas d'argument.
waitForAll renvoie les mêmes résultats que la dernière fonction s'étant arrêtée.
- Le fichier:
- pastebin get G8xLLxz3 synchro
Dernière édition par Quae le Lun 20 Mar - 22:46, édité 2 fois
Quae- Messages : 4
Date d'inscription : 18/03/2017
Re: [API]Fonctions en parallèle
Merci, c'est sympa, et c'est plus propre que d'avoir à jouer avec des variables plus ou moins globales et de s'emmêler les pinceaux
Re: [API]Fonctions en parallèle
Yup, et il y a les retours aussi ce qui permet de faire un waitForAny(os.pullEvent,"mouse_click",os.pullEvent,"modem_message") par exemple en restreignant à plusieurs événements, mais pas forcément tous.
Quae- Messages : 4
Date d'inscription : 18/03/2017
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum