|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre éclairé
![]() Inscription : juin 2006 Messages : 767 ![]() |
Bonjour,
Je souhaite partager entre plusieurs taches une variable qui est modifiée par une de ces taches sans qu'une de ces taches soit pénalisé par l'attente. Description : J'ai d'abord une tache Rackctrl dans mon paquetage Main qui interface la console. Dans cette console, je souhaite, pouvoir entrée un caractère pour démarrer ou arrêter la tacche qui modifie la variable,ou arrêter la tache à tout moment, et surtout afficher la variable modifier par une l'tache. Typiquement Rackctrl : Code ada :
Code ada :
Au lieu des commentaires, j'écrirais bien pour une tache nommé Racksheduler : Code ada :
Merci pour vos réponse. ![]() edit, j'ai déjà modifier le code proposé en mieux : Mais je suis preneur de solution autres !
__________________
Mon développement |
||||||
|
|
10
|
|
|
#2 |
|
Membre confirmé
![]() |
Ton code fonctionne parfaitement, pourquoi vouloir le changer ?
Une alternative serait de regarder du côté des guards décrit ici mais cela n'aurait vraiment d'intérêt que si tu avais du code spécifique lors du passage par End_Of_Task à false. Par contre, y a un truc qui me chiffonne. A quoi sert Initialize, une initialisation à false suffisant ? Juste pour avoir un moyen de démarrer ta tâche quand tu le désires ? |
|
00
|
|
|
#3 |
|
Membre éclairé
![]() Inscription : juin 2006 Messages : 767 ![]() |
Bonjour, merci Blackknight pour ta réponse.
En fait j'ai même viré le test, et j'ai implémenté une entré dans la section de suspend de traitement dans Racksheduler. ce qui fait que ça retourne jour la valeur courante de la variable, stopé ou en cours de traitement. Dans initialise j'initialise un type après la saisie d'unparamètre par l'utilisateur, si le paramètre n'est pas entrée (fin de texte) je retourne True pour End_of_task. Les exception c'est la misère dans les taches.
__________________
Mon développement |
|
|
00
|
|
|
#4 | ||||
|
Membre éclairé
![]() Inscription : juin 2006 Messages : 767 ![]() |
bonjour, je reviens avec mon problème etendue par la multiplicité de mes tache "cliente".
J'avais fait ceci : Tache cliente Code ada :
Tache cliente Code ada :
Maintenant, je cherche comment partager l'index avec plusieurs autre tache Cliente. J'ai exactement 5 taches (Global, Fx, Lead, Bass, Drums) qui doivent connaitre l'index à tout moment, mais en garantissant que la lecture ne s'effectuera qu'une seule fois pour chacune des tache cliente. En espérant être clair, si non je complèterait, s'il vous plait, merci. edit du coup c'est partage avec attente.
__________________
Mon développement |
||||
|
|
00
|
|
|
#5 | ||
|
Membre éclairé
![]() Inscription : juin 2006 Messages : 767 ![]() |
J'ai eu une idée c'est pas terrible à mon avis mais ça fonctionne.
J'ai fait une entrée par type de taches, et je gère l'accept avec un tableau de boolean. Code ada :
__________________
Mon développement |
||
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Enseignant Inscription : avril 2012 Messages : 26 ![]() |
Euh ... j'ai un peu survolé le post, alors n'hésite pas à me dire si ça ne répond pas à ta question. Si j'ai bien compris tu as des données partagées entre plusieurs tâches concurrentes ? Alors pourquoi ne pas encapsuler ces données dans un type protected ? Tu fournis les entrées (avec gardes obligatoires) et méthodes associées et elles se feront tout simplement en mutex. Me trompe-je ?
|
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() Inscription : juin 2006 Messages : 767 ![]() |
Merci, bonsoir, tu aurais une description un poil plus détaillé ?
J'ai tout compris mais quel avantage ?
__________________
Mon développement |
|
|
00
|
|
|
#8 | ||||||||
|
Nouveau Membre du Club
![]() Enseignant Inscription : avril 2012 Messages : 26 ![]() |
Un type protégé ça donne ça (j'ai pris l'exemple d'un type sémaphore) :
Spécification : Code :
Code :
Code :
Code :
|
||||||||
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() Inscription : juin 2006 Messages : 767 ![]() |
Plus j'y pense, moins j'ai envie d'y penser.
T'as vue le corps serveur ... Comment je fait pour savoir si une tache particulière est déjà passé ou pas. Je sais en gros ce qu'est l'exclusion mutuelle, mais c'est pas le sujet. Je sais qu'avec des sémaphore on peut garantir une les opérations dans une section critique. En gros. Mais là je vois pas comment tu peux savoir qui tu a servie ou pas.
__________________
Mon développement |
|
|
00
|
|
|
#10 |
|
Membre éclairé
![]() Inscription : juin 2006 Messages : 767 ![]() |
Bonjour, je fais un truc qui utilise un sémaphore, je me tape des interblocage.
Si vous aviez plus ample motivation pour transposer mon code avec l'utilisation des sémaphore je suis preneur.
__________________
Mon développement |
|
|
00
|
|
|
#11 | ||||||
|
Membre éclairé
![]() Inscription : juin 2006 Messages : 767 ![]() |
Bonjour,
Donc le but était de partager de la donnée entre plusieurs tache. En fait il s'agit un compositeur virtuel avec des générateur musicaux qui exploite un séquenceur relier à un périphérique MIDI. Le tout était d'ordonnancer le tout, comme souvent. ![]() Je vous montre ce que j'ai fait vous me direz. Voici donc les données à partgaer. Code ada :
Le sequenceur Code ada :
Lorsque toute les tache on obtenu l'information on incrémente d'un pas. Un générateur. Code ada :
Excusez moi un peu pour l'indentation.
__________________
Mon développement |
||||||
|
|
00
|
|
|
#12 |
|
Membre éclairé
![]() Inscription : juin 2006 Messages : 767 ![]() |
Bonjour, Alors, le code si dessus, ne me conviens pas finalement.
D'abord parce qu'il fini par bugger, et d'autres fonctionnalités aussi, comme l'arrêt du programme... ET puis sur windows il marche pas du tout donc, c'est qu'il y a un problème. Donc, je me remet à la recherche de solution pour ce programme. Vous trouverez les source complète de Quatuor à cette adresse : [URL="http://80.15.188.151/dev[/URL] J'en suis à la version Quatuor-0.2.12. Merci pour votre aide.
__________________
Mon développement |
|
|
00
|
|
|
#13 | ||
|
Membre éclairé
![]() Inscription : juin 2006 Messages : 767 ![]() |
J'ai tout de même trouvé une variante.
A comparer avec le code ci-dessus. Code ada :
Ca semble mieux tenir sur Gnu/Linux, mais ça ne marche pas du tout sur Windows.
__________________
Mon développement |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com