J'ai une procédure avec des tâches. Je dois faire quelque chose après l'achèvement de toutes les tâches. Comment puis-je faire cela?Attente de tâches dans Ada
1
A
Répondre
4
indiquer les tâches dans un bloc interne: le bloc ne quittera pas jusqu'à ce que toutes les tâches sont terminées, ARM7.6.1(4)
with Ada.Text_IO; use Ada.Text_IO;
procedure After_Tasks is
begin
Put_Line ("at the start");
declare
task T1;
task T2;
task body T1 is
begin
delay 1.0;
Put_Line ("t1 done");
end T1;
task body T2 is
begin
delay 2.0;
Put_Line ("t2 done");
end T2;
begin
null;
end; -- block here until T1 & T2 are completed
Put_Line ("at the end");
end After_Tasks;
+0
Ce serait aussi ma suggestion. Cependant, je mettrais probablement le code "à la fin" dans le code appelant de la procédure juste après l'appel à la procédure. Déclarer des blocs a toujours l'air d'être un hack pour moi. –
4
Sans aucune connaissance de ce que vous êtes en train d'essayer d'accomplir, un couple poignarde à accomplir ce serait:
- Monitor (sondage) attribut 'Terminated de chaque tâche en attente.
- Implémentez une entrée "Shutdown" dans votre tâche (s) qui est la dernière chose que chaque tâche effectue. Avoir votre «contrôleur» rendez-vous avec l'entrée Shutdown de chaque tâche et une fois que toutes les tâches ont accepté et terminé le rendez-vous, à toutes fins utiles, vous pouvez conclure que les tâches ont toutes terminé. Pour les pédantistes parmi nous, nous pourrions exécuter un court délai (
delay 0.0;
) puis vérifier via l'attribut 'Terminé' que toutes les tâches sont terminées, ou au moinspragma Assert()
donc.
Questions connexes
- 1. Expressions régulières dans Ada?
- 2. Iterators dans Ada
- 3. Attente de l'achèvement de toutes les tâches à l'aide de la bibliothèque parallèle de tâches dans .NET 4.0
- 4. Arrondi dans Ada
- 5. Ada: Installation de fenêtres
- 6. Utilisation de Pragmas Ada
- 7. Longueur arbitraire entier dans Ada
- 8. Ada: optimiser pragma
- 9. Ada: déclaration constante
- 10. Doutes en langue ada
- 11. Compilateurs Ada pour Linux
- 12. Ada: using aunit
- 13. ADA Real_time chaîne
- 14. Héritage Type Multiple Ada
- 15. Redimensionnement dynamique de java.util.concurrent.ThreadPoolExecutor pendant qu'il a des tâches en attente
- 16. Comment puis-je savoir pourquoi une de mes tâches vxWorks est en attente?
- 17. Suivi des dépendances d'en-tête dans Ada?
- 18. Erreur dans le fichier séparé Ada
- 19. Comment puis-je créer un tableau de bord avec toutes les tâches en attente utilisant Celery?
- 20. Existe-t-il un moyen sûr d'obtenir le nombre de tâches en attente d'achèvement?
- 21. Android Activité Titre Attente en attente
- 22. Ada: attribut 'last et' safe_large
- 23. Création d'implémentations de référence de modèle dans Ada?
- 24. Ada Ada.Containers Procédure d'effacement Problème
- 25. Opération de fichier Ada: instanciation et exception
- 26. Ada pour un nouveau projet?
- 27. Comment puis-je voir ce qui se passe avec les tâches en attente en utilisant delayed_job?
- 28. Comment faire une concaténation de chaînes dans gdb/ada
- 29. Allocation de tableau dynamique d'un enregistrement dans Ada
- 30. Fonctions de limite appelées par d'autres fonctions spécifiques dans Ada
La nature de cette question suggère que vous seriez mieux fournir plus d'informations sur quelle fonctionnalité vous essayez de mettre en œuvre, plutôt que de demander comment faire cette chose spécifique. La raison en est que ce que vous demandez n'est généralement pas quelque chose dont un programmeur Ada se trouverait confronté. –