About Me

我的相片
台北市, Taiwan
我是方選,
方白科技(finebind tech.)共同創辦人,
臺大資管所畢,
希望能幫助更多的人!

FB: http://fb.com/function1122
LINE: http://bit.ly/1foeZft (手機開啟點擊網址自動加入)

最新15則讀者回應

最新文章

FUNction's 上課筆記

Label Cloud

Blog Archive

FeedBurner

追蹤者

ThreadPool.QueueUserWorkItem (new WaitCallback... 的意思

FUNction 於 2007年12月26日 上午11:14 發表
嘖...我又看不懂了
ThreadPool.QueueUserWorkItem (new WaitCallback... 這是什麼意思
從"毛毛的小窩—勤奮人生絢麗生活"找到的資料
(http://www.cnblogs.com/mjgforever/archive/2007/05/16/748505.html) [簡體]
我將之用Google 翻譯成正體,再替換掉一些專有名詞(應該有比較平易近人才對)

1) ThreadPool 類別,提供一個執行緒池,可用於發送工作項、處理非同步I/O、代表其他執行緒等待以及處理計時器。
許多應用程式創建的執行緒都要在休眠狀態中消耗大量時間,以等待事件發生。其他執行緒可能進入休眠,只被定期喚醒以輪流更改或更新狀態訊息。執行緒池通過為應用程序提供一個由系統管理的輔助執行緒池,使我們可以更為有效的使用執行緒。一個執行緒監視排到執行緒池的若干個等待操作的狀態。當一個等待操作完成時,執行緒池中的一個輔助執行緒就會執行對應的回調函數。值得注意的是:託管執行緒池中的執行緒為後台執行緒,即它們的IsBackground 屬性為true。這意味著在所有的前台執行緒都已退出後,執行緒池的執行緒不會讓應用程式保持運行。

我們也可以將與等待操作不相關的工作項排列到執行緒池。若要請求由執行緒池中的一個執行緒來處理工作項,就要使用QueueUserWorkItem 方法。此方法將對將被從執行緒池中選定的執行緒使用的方法或委託的引用用作參數。一個工作項排入佇列後就無法再取消它。

計時器佇列中的計時器以及已註冊的等待操作也使用執行緒池。它們的回調函數也會排列到執行緒池。

每個程序都有一個執行緒池。執行緒池的預設大小為每個可用程序有25個執行緒。 使用SetMaxThreads方法可以更改執行緒池中的執行緒數。每個執行緒使用預設的堆疊大小並按照預設的優先順序運行。

2) WaitCallback 委託表示執行緒池執行緒要執行的傳回方法。
WaitCallback 表示要在執行緒池中的執行緒上執行的傳回方法。創建委託,方法是將傳回方法傳遞給WaitCallback 建構函數。我們的方法必須具有此處所顯示的簽名。

通過將WaitCallback 委託傳遞給ThreadPool.QueueUserWorkItem 來將任務排入佇列以便執行。我們的傳回方法將在某個執行緒池中的執行緒可用時執行。

如果要將資訊傳遞給傳回方法,請創建包含所需資訊的對象,並在將任務排入佇列以便執行時將它傳遞給QueueUserWorkItem。每次執行您的傳回方法時,state 參數都包含此對象。

有關如何使用傳回同步執行緒池執行緒的更多資訊,請參見託管執行緒池。

3) ThreadPool.QueueUserWorkItem 方法 將方法排入隊列以便執行,並指定包含該方法所用數據的對象。
此方法在有執行緒池中的執行緒變得可用時執行。

在程式中我們通常會看到ThreadPool.QueueUserWorkItem (new WaitCallback(someMethod), someHandle) 這樣的語法,剛剛那個大陸Blog 也有程式範例。其他的資料請參考MSDN囉:http://msdn2.microsoft.com/zh-tw/library/system.threading.threadpool.aspx Tags: ,

讀者回應 ( 0 意見 )

張貼留言

如果沒有帳戶,建議使用「名稱/網址」留言喔^^