2011-07-21 29 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。我發佈了最少量的代碼來獲得粗糙的線程池。當然,你可能想調整和擴展這個實現來滿足你的特定需求。