Comment les entrées de canaux peuvent-elles être traitées de manière prioritaire? Y a-t-il quelque chose d'équivalent à la construction "reactWithin(0) { ... case TIMEOUT }
" de Scala?Priorisation des entrées de canal dans Retlang
0
A
Répondre
0
J'ai écrit une classe d'abonnement qui fournit des messages prioritaires sur un intervalle défini. Ce n'est pas un cas général idéal pour consommer des messages prioritaires, mais je l'afficherai pour la postérité. Je pense qu'un RequestReplyChannel personnalisé serait une meilleure option pour certains autres cas. La mise en œuvre de PriorityQueue est laissée au lecteur en tant qu'exercice.
class PrioritySubscriber<T> : BaseSubscription<T>
{
private readonly PriorityQueue<T> queue;
private readonly IScheduler scheduler;
private readonly Action<T> receive;
private readonly int interval;
private readonly object sync = new object();
private ITimerControl next = null;
public PrioritySubscriber(IComparer<T> comparer, IScheduler scheduler,
Action<T> receive, int interval)
{
this.queue = new PriorityQueue<T>(comparer);
this.scheduler = scheduler;
this.receive = receive;
this.interval = interval;
}
protected override void OnMessageOnProducerThread(T msg)
{
lock (this.sync)
{
this.queue.Enqueue(msg);
if (this.next == null)
{
this.next =
this.scheduler.Schedule(this.Receive, this.interval);
}
}
}
private void Receive()
{
T msg;
lock (this.sync)
{
msg = this.queue.Dequeue();
if (this.queue.Count > 0)
{
this.next =
this.scheduler.Schedule(this.Receive, this.interval);
}
}
this.receive(msg);
}
}
Questions connexes
- 1. Canal alpha dans OpenCV
- 2. Test des entrées de formulaire dans PHPUnit
- 3. Obtenir des entrées avec IUP dans Lua
- 4. Comment implémenter la priorisation des tâches en utilisant un ExecutorService dans Java 5?
- 5. Algorithme de synchronisation de l'ordre des entrées
- 6. Supprimer des entrées de clé de tracé spécifiques dans JFreeChart
- 7. Emplacement de canal incohérent RemoteObject
- 8. entrées dans Orphaned aspnetdb
- 9. Entrées dans/proc/meminfo
- 10. Correspondance des entrées de formulaire avec javascript?
- 11. WCF canal Callback
- 12. canal Alpha dans IE 6.x
- 13. Gestion efficace des entrées au clavier
- 14. Débogage manipulant des entrées légèrement différentes
- 15. problème avec des entrées avec IE7
- 16. gridview.getElementsByTagName ("entrée") donne des entrées nulles Pourquoi?
- 17. Modification de plusieurs entrées dans Jabref
- 18. entrées uniques dans un tableau
- 19. TIBCO.EMS client .NET/canal WCF
- 20. Utiliser WMI pour créer des entrées DNS
- 21. Ajouter des entrées de texte basé sur l'exigence de l'utilisateur
- 22. comment écrire des données sur le canal socket
- 23. Autoriser le canal à lire des messages fragmentés
- 24. T-SQL: Comment enregistrer des entrées erronées lors de l'importation
- 25. Obtenir des entrées des périphériques MIDI en direct (Python)
- 26. Programmation des pages Wiki Sharepoint 2007 - Validation des entrées
- 27. Créer dynamiquement des entrées de texte (ASP.net/C#)
- 28. comparant les listes et de trouver des entrées uniques
- 29. Validation des entrées de formulaire d'une forme perticular
- 30. redimensionnement d'une image avec canal alpha
Au lieu d'écrire votre propre, vous pouvez envisager d'utiliser les collections électriques de Wintellect pour .NET (OrderedBag), vous pouvez trouver ces via CodePlex. –
Rick