2009-10-21 180 views
-1

我的問題是: 我想用多線程TECHNIC工作 所以我用的線程池,但我要的是下面 我想確定線程池的大小,當程序被啓動 時,我有要管理的數據,我將從ThreadPool中使用一個線程來處理這個項目, ,因爲我已經閱讀過,您可以根據需要在threadPool中定義項目,但每個線程都將自動運行我想要控制線程以確定何時線程應運行 如果沒有數據線程應等待(或停止)當我有一個新的數據(這就像一個請求) 其中一個線程將運行.....謝謝使用線程池

+3

WTF。這裏沒有問題。問題以問號(?)結尾。除此之外,這是一個漫無邊際的思想。說真的,我在這裏甚至找不到單獨的句子。投票到關閉。 – abelenky 2009-10-21 21:22:45

回答

2

使用ThreadPool時,您通常會使用一些(可選)輸入數據將請求排列到池中,這會導致池選擇可用線程並運行該進程。完成後,該線程返回到池中,並可用於其他請求。你通常不需要費心管理線程,但可以簡單地排隊一個工作項需要的時候:

DataToWorkWith dataItem = GetDataToWorkWith(); 
if (dataItem != null) 
{ 
    ThreadPool.QueueUserWorkItem(MyProcessingMethod, dataItem); 
} 


// somewhere else in the class 
private void MyProcessingMethod(object dataItem) 
{ 
    // work with the dataItem; this will run on a threadpool thread, if 
    // invoked through the thread pool 
} 

因此,所有你需要做的是建立一些過程搞清楚,如果有數據工作將請求排列在ThreadPool中並讓它完成工作。

0

以下是關於C# ThreadPool Usage的簡短摘要。以下是MSDN How To: Use a ThreadPool。這裏是ThreadPool參考。

特別是,您可以使用GetAvailableThreads獲得可用的線程。您還可以使用SetMinThreadsSetMaxThreads來控制線程池中的最小和最大線程數。

一般來說,我會建議不要搞亂線程的數量,除非你確切地知道你在做什麼。線程池由您和CLR組件共享,因此通過更改線程數可以影響CLR行爲。有關更多詳細信息,請閱讀ThreadPool類文檔中的備註部分。

0

您通常不會手動管理ThreadPool中的線程。建議的用法是將代理隊列作爲Fredrik的示例,並讓ThreadPool管理線程。有了這個約定,如果沒有數據,你不應該排隊任何工作。當數據可用時,您可以排隊工作。如果您正在尋找運行後臺進程的方式,那麼在您的應用程序啓動時,您可以創建Timer並將其添加到應用程序的狀態,或者您可以定義一個靜態類來管理Timer,並在應用程序啓動時觸摸該類。