2011-07-21 4 views
2

J'ai une application qui a deux tâches principales: l'encodage, le traitement vidéo. Ces tâches sont indépendantes. Chaque tâche que je voudrais exécuter avec un nombre configurable de threads. Pour cette raison, pour une tâche, j'utilise généralement ThreadPool et SetMaxThreads. Mais maintenant j'ai deux tâches et voudrais "deux configurables (nombre de threads) threapool pour chaque tâche". Eh bien, ThreadPool est une classe statique. Alors, comment puis-je mettre en œuvre ma stratégie (nombre de threads configurable facile pour chaque tâche).Séparer threadPool pour chaque tâche

Merci

Répondre

4

vous voudrez probablement votre propre piscine de fil. Si vous utilisez .NET 4.0 alors il est en fait assez facile de rouler le vôtre si vous utilisez la classe BlockingCollection.

public class CustomThreadPool 
{ 
    private BlockingCollection<Action> m_WorkItems = new BlockingCollection<Action>(); 

    public CustomThreadPool(int numberOfThreads) 
    { 
    for (int i = 0; i < numberOfThreads; i++) 
    { 
     var thread = new Thread(
     () => 
     { 
      while (true) 
      { 
      Action action = m_WorkItems.Take(); 
      action(); 
      } 
     }); 
     thread.IsBackground = true; 
     thread.Start(); 
    } 
    } 

    public void QueueUserWorkItem(Action action) 
    { 
    m_WorkItems.Add(action); 
    } 
} 

C'est vraiment tout ce qu'il y a à faire. Vous devez créer un CustomThreadPool pour chaque pool réel que vous souhaitez contrôler. J'ai posté le montant minimum de code pour obtenir un pool de threads brut. Naturellement, vous voudrez peut-être modifier et étendre cette implémentation pour répondre à vos besoins spécifiques.