2011-07-21 43 views
2

我有应用程序有两个主要任务:编码,处理视频。 这些任务是独立的。 我想用可配置数量的线程运行每个任务。 由于这个原因,我通常使用ThreadPool和SetMaxThreads执行一个任务。但是现在我有两个任务,并且希望“每个任务有两个可配置(线程数量)的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。我发布了最少量的代码来获得粗糙的线程池。当然,你可能想调整和扩展这个实现来满足你的特定需求。