進程優先級和線程優先級正在構建線程的base priority
。請參見Scheduling Priorities以查找優先級如何組合。通過查看這個列表,你的理解變得很清楚了,在某個優先等級內,base priority
可以具有各種值,由thread priority
確定。
所有Windows版本都不支持SetPriorityClass
和THREAD_MODE_BACKGROUND_END
值的PROCESS_MODE_BACKGROUND_BEGIN
值。
PROCESS_MODE_BACKGROUND_BEGIN: 該系統降低了工藝(及其線程)的資源調度優先級,以便它可以無需在前臺顯著影響活動進行後臺工作。
THREAD_MODE_BACKGROUND_END: 終止後臺處理模式。系統恢復線程的資源調度優先級,就像線程進入後臺處理模式之前一樣。
此處可能出現的情景的後果是可預測的:SetPriorityClass
將會將其所有線程的進程設置爲background processing mode
。以下SetThreadPriority
將只從background processing mode
發佈一個線程。但進程的所有其他可能線程將保持處於後臺處理模式。
注:只有process priority class
和thread priority
組合確定base priority
。因此,對GetThreadPriority
的呼叫和對GetPriorityClass
的呼叫都不會返回基本優先級。只有它們的組合才能釋放上面「計劃優先級」鏈接中描述的基本優先級。不幸的是,新的background processing mode
值尚未包含在base priority
列表中。但名稱base priority
說明了這裏的重要內容:根據基本優先級(從進程優先級和線程優先級派生而來),調度程序可以動態調整調度優先級。後臺模式只是fine tune
調度優先級的另一種方式。另一種方式是Priority Boosts。優先級提升功能存在一段時間。對SetThreadPriority
和SetPriorityClass
的background processing mode
值的新訪問直接打開了優先級提升功能。在Windows XP中,這必須通過致電SetProcessPriorityBoost來完成。
如果您想試驗,請使用GetThreadPriority()。 –
您可以閱讀本文以瞭解Android SDK如何在Runnable中使用setThreadPriority:http://developer.android.com/training/multiple-threads/define-runnable.html –