Share via


執行緒排序服務

執行緒排序服務會控制一或多個用戶端執行緒的執行。 它可確保每個用戶端執行緒在指定的期間和相對循序執行一次。

Windows Server 2003 和 Windows XP: 執行緒排序服務可從 Windows Vista 和 Windows Server 2008 開始使用。

執行緒排序服務預設為關閉,且必須由使用者啟動。 當執行緒排序服務正在執行時,每隔 5 秒就會啟動一次,以檢查是否有新的要求,即使系統處於閒置狀態也一樣。 這可防止系統睡眠超過 5 秒,導致系統耗用更多電源。 如果能源效率對應用程式很重要,最好不要使用執行緒排序服務,而是允許系統排程器管理執行緒的執行。

每個用戶端執行緒都屬於 執行緒排序群組父執行緒會呼叫AvRtCreateThreadOrderingGroup函式來建立一或多個執行緒排序群組。 父執行緒會使用此函式來指定執行緒排序群組和逾時間隔的期間。

其他用戶端執行緒會呼叫 AvRtJoinThreadOrderingGroup 函式,以聯結現有的執行緒排序群組。 這些執行緒會指出它們是否為執行順序中父執行緒的前置或後續任務。 每個用戶端執行緒預期會在每個期間完成一定數量的處理。 群組內的所有線程都應該在期間內完成其執行,加上逾時間隔。

執行緒排序群組的執行緒會在 AvRtWaitOnThreadOrderingGroup 函式控制的迴圈內括其處理常式代碼。 首先,前置執行緒會依聯結群組的順序一次執行一個執行緒,而父執行緒和後續執行緒在對 AvRtWaitOnThreadOrderingGroup的呼叫時遭到封鎖。 當每個前置執行緒完成其處理時,執行控制權會傳回其處理迴圈頂端,而執行緒會再次呼叫 AvRtWaitOnThreadOrderingGroup ,以封鎖直到其下一回合為止。 在所有前置執行緒都呼叫此函式之後,執行緒排序服務就可以排程父執行緒。 最後,當父執行緒完成其處理,並再次呼叫 AvRtWaitOnThreadOrderingGroup 時,執行緒排序服務可以依聯結群組的順序,一次排程一個後續執行緒。 如果所有線程在期間結束之前完成執行,則所有線程會等到期間其餘部分經過,再再次執行任何執行緒。

當用戶端不再需要線上程排序群組中執行時,它會呼叫 AvRtLeaveThreadOrderingGroup 函式,以從群組中移除本身。 請注意,父執行緒不應該從執行緒排序群組中移除本身。 如果執行緒在期間之前未完成其執行,加上逾時間隔經過,則會從群組中刪除。

父執行緒會呼叫 AvRtDeleteThreadOrderingGroup 函式來刪除線程排序群組。 如果父執行緒未在期間之前完成其執行,加上逾時間隔,也會終結執行緒排序群組。 當執行緒排序群組終結時,從該群組的執行緒對 AvRtWaitOnThreadOrderingGroup 的任何呼叫都會失敗或逾時。