Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ovladač pomalého zařízení nebo zařízení, které zřídka používáte (například jednotku CD/DVD), dokáže vyřešit mnoho problémů s čekáním vytvořením systémového vlákna vyhrazeného zařízením. Většina ovladačů systému souborů navíc používá systémová pracovní vlákna a poskytuje rutiny zpětného volání pracovních vláken.
Pokud má ovladač zařízení vlastní kontext vlákna nebo běží v kontextu systémového vlákna, může k koordinaci použít synchronizační objekty. Rutina zpětného volání pracovního vlákna vyhrazeného pro zařízení nebo na nejvyšší úrovni ovladače může synchronizovat operace s objektem dispečera, jako je objekt události nebo objekt semaforu, ve sdílenou komunikační oblast rozšíření zařízení ovladače. Například vlákno určené pro zařízení může čekat na sdílený objekt dispečera, když zařízení vlákna není v provozu, voláním KeWaitForSingleObject pro semafor. Dokud se ovladač zařízení nevyvolá k provedení vstupně-výstupní operace, jeho čekající vlákno nepoužívá žádný čas procesoru. Při zavolání ovladače nastaví semafor na signalovaný stav.
Ovladač může volat PsCreateSystemThread pro vytvoření vlákna vyhrazeného pro ovladač nebo zařízení a poté volat KeSetBasePriorityThread k nastavení základní priority vlákna. Ovladač by měl zadat hodnotu priority, která zabraňuje inverzi priority za běhu v počítačích SMP. To znamená, že nastavení základní priority vlákna vytvořeného ovladačem může způsobit zpoždění při provádění vláken s nižší prioritou, která odesílala vstupně-výstupní požadavky pro daný ovladač.
Vzhledem k tomu, že objekty vlákna jsou samy o sobě typem objektu dispečera, může vlákno počkat na dokončení jiného vlákna. Chcete-li získat ukazatel objektu vlákna asociovaný s vláknem, ovladač může volat ObReferenceObjectByHandle a předat popisovač vlákna přijatý z PsCreateSystemThread.
Vlákno může volat KeDelayExecutionThread, aby čekalo na interval, který může být plná doba časového kvanta nebo delší. Členitost intervalu KeDelayExecutionThread je přibližně 10 milisekund. Protože KeDelayExecutionThread je rutina řízená časovačem, je granularita jejího intervalu mírně rychlejší nebo pomalejší než 10 milisekund v závislosti na platformě.