線程排序服務
線程排序服務 控制一或多個用戶端線程的執行。 它會確保每個用戶端線程在指定的期間和相對順序執行一次。
Windows Server 2003 和 Windows XP: 從 Windows Vista 和 Windows Server 2008 開始提供線程排序服務。
線程排序服務預設為關閉,且必須由用戶啟動。 當線程排序服務正在執行時,會每隔 5 秒啟動一次,以檢查是否有新的要求,即使系統處於閑置狀態也一樣。 這可防止系統睡眠超過5秒,導致系統耗用更多的電源。 如果能源效率對應用程式很重要,最好不要使用線程排序服務,而是允許系統排程器管理線程的執行。
每個用戶端線程都屬於 線程排序群組。 父線程 呼叫 AvRtCreateThreadOrderingGroup 函式來建立一或多個線程排序群組。 父線程會使用此函式來指定線程排序群組和逾時間隔的期間。
其他用戶端線程會呼叫 AvRtJoinThreadOrderingGroup 函式來聯結現有的線程排序群組。 這些線程會指出它們是否為執行順序中父線程的前置任務或後續任務。 每個用戶端線程都預期會在每個期間完成一定數量的處理。 群組內的所有線程都應該在指定期限加上超時間隔內完成其執行。
線程排序群組的線程會在由 AvRtWaitOnThreadOrderingGroup 函式控制的迴圈內括住其處理程式代碼。 首先,前置線程會按照加入群組的順序逐個執行,而父線程和後續線程在呼叫 AvRtWaitOnThreadOrderingGroup時遭到封鎖。 當每個前置線程完成其處理時,執行控制權會傳回其處理迴圈的頂端,而線程會再次呼叫 AvRtWaitOnThreadOrderingGroup 封鎖,直到其下一回合為止。 在所有前置線程都呼叫此函式之後,線程排序服務就可以排程父線程。 最後,當父線程完成處理並再次呼叫 AvRtWaitOnThreadOrderingGroup 時,線程排序服務可以按照它們加入群組的順序,一次排程一個後續線程。 如果所有線程在期間結束前完成執行,則所有線程都會等到期間的剩餘時間結束後,再重新執行。
當用戶端不再需要作為線程排序群組的一部分執行時,它會呼叫 AvRtLeaveThreadOrderingGroup 函式,以從群組中移除本身。 請注意,父線程不應該從線程排序群組中移除本身。 如果線程在週期加上超時間隔之前未完成執行,則會從群組中刪除。
父線程會呼叫 AvRtDeleteThreadOrderingGroup 函式來刪除線程排序群組。 如果父線程未能在時間段加上逾時間隔之前完成其執行,則線程排序群組也會被終結。 當線程排序群組被銷毀時,該群組中線程對 AvRtWaitOnThreadOrderingGroup 的任何呼叫都會失敗或逾時。