2011-07-21 13 views
2

私は、エンコード、処理ビデオという2つの主なタスクを持つアプリケーションを持っています。 これらのタスクは独立しています。 私が望む各タスクは、設定可能なスレッド数で実行します。 このような理由から、私は通常、ThreadPoolとSetMaxThreadsを使用します。しかし、今私は2つのタスクを持っているし、 "各タスクのための2つの構成可能な(スレッドの数)threapool"したいです。 まあ、ThreadPoolは静的なクラスです。だから私はどのように私の戦略(各タスクのためのスレッドの設定の容易な数)を実装することができます。タスクごとに別のスレッドプール

ありがとうございました

答えて

4

おそらく独自のスレッドプールが必要です。 .NET 4.0を使用している場合は、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); 
    } 
} 

これは本当にすべてです。制御する実際のプールごとにCustomThreadPoolを作成します。私は、粗スレッドプールを取得するために最低限のコードを投稿しました。当然のことながら、具体的なニーズに合わせてこの実装を調整して拡張することもできます。

関連する問題