Sdílet prostřednictvím


Odstranění objektu časovače System-Allocated

Počínaje Windows 8.1 rutina ExDeleteTimer odstraní objekt časovače vytvořený rutinouExAllocateTimer. Tento objekt časovače je systémově přidělená EX_TIMER struktura, jejíž členy jsou neprůzdné pro ovladače. Před odstraněním objektu časovače ExDeleteTimer zakáže další operace s časovačem na objektu a zruší nebo dokončí všechny čekající operace na objektu, které mohou být prováděny.

Po volání ovladače ExDeleteTimer, tato rutina provede několik kroků, aby se zajistilo, že může bezpečně odstranit objekt časovače. Nejprve ExDeleteTimer označí objekt časovače jako zakázaný, aby ovladač nemohl spustit novou operaci časovače, která objekt používá. Jakmile je objekt časovače zakázán, volání ExSetTimer nebo ExCancelTimer rutina okamžitě vrátí FALSE a neprovede žádnou operaci. Druhé volání ExDeleteTimer také vrátí hodnotu FALSE a neprovede žádnou operaci.

Dále ExDeleteTimer zkontroluje, zda časovač je stále ve stavu čekání po předchozím volání ExDeleteTimer. Zakázání objektu časovače nezruší časovač, který byl nastaven před zakázáním objektu. V některém z následujících dvou případů může časovač, který byl dříve nastaven, vypršet poté, co je objekt časovače zakázán:

  • Časovač je periodický.
  • Časovač je jednorázový (nebo neperiodický) a ještě nevypršel.

Periodický časovač nikdy nemůže vypršet více než jednou po zakázání objektu časovače.

Pokud váš ovladač implementuje rutinu zpětného volání ExTimerCallback, je zaručeno, že parametr Časovač této rutiny bude vždy platným ukazatelem na objekt časovače (strukturu EX_TIMER), a to i v případě, že časovač vyprší poté, co je objekt časovače zakázán.

Pokud žádný časovač není nevyřízen, ExDeleteTimer odstraní objekt časovače a vrátí se bez čekání.

Pokud je časovač v čekacím stavu, když je volána ExDeleteTimer, hodnoty parametrů Cancel a Wait, které váš ovladač poskytuje této rutině, určují chování této rutiny. Parametr Cancel určuje ExDeleteTimer, zda zkusit zrušit čekající časovač. Parametr Wait říká ExDeleteTimer, zda čekat na vrácení, dokud není objekt časovače smazán.

Pokud Zrušit je FALSE (v takovém případě Čekání musí být FALSE) a časovač čeká na vyřízení, ExDeleteTimer umožní vypršení platnosti časovače před odstraněním objektu časovače. V tomto případě ExDeleteTimer označí objekt časovače, který má být odstraněn poté, co vyprší platnost čekajícího časovače (a dokončí se jakékoliv poslední volání rutiny ExTimerCallback). Pak ExDeleteTimer vrátí, aniž by čekal, než časovač dokončí vypršení platnosti, nebo odstranění objektu.

Pokud zrušitTRUE, ExDeleteTimer se pokusí zrušit čekající časovač před vypršením jeho platnosti. exDeleteTimer vrátí true, pokud časovač úspěšně zruší. ExDeleteTimer vrátí FALSE pokud časovač nemůže zrušit, což je případ jednorázového časovače, který už vypršel nebo je v procesu vypršení platnosti. ExDeleteTimer také vrátí FALSE, pokud byl časovač (jednorázový nebo periodický) zrušen před voláním ExDeleteTimer nebo pokud časovač nebyl nikdy nastaven.

Pokud Cancel je TRUE a Wait je FALSE, ExDeleteTimer nikdy neblokuje volající vlákno. Pokud objekt časovače nelze okamžitě odstranit, ExDeleteTimer označí objekt časovače k odstranění po vypršení platnosti čekajícího časovače a vrátí se okamžitě, aniž by čekal na vypršení časovače nebo na odstranění objektu.

Pokud Zrušit a Wait jsou TRUE, ExDeleteTimer blokuje volající vlákno, pokud objekt časovače nelze okamžitě odstranit. ExDeleteTimer v případě potřeby počká, až časovač dokončí vypršení a jakékoli zpětné volání na ovladačem implementovanou rutinu ExTimerCallback bude dokončeno. Dále ExDeleteTimer odstraní objekt časovače a zavolá rutinu ExTimerDeleteCallback, pokud ovladač implementuje tuto rutinu. Nakonec se ExDeleteTimer vrátí.

Ovladač může volat ExDeleteTimer z rutiny ExTimerCallback, která běží při IRQL = DISPATCH_LEVEL, ale ovladač musí v tomto volání nastavit parametr Wait na FALSE.

Jako možnost může ovladač implementovat ExTimerDeleteCallback rutinu zpětného volání, která se spustí po odstranění objektu časovače. Obvykle ExTimerDeleteCallback rutina uvolní všechny systémové prostředky, které ovladač přidělil k použití s objektem časovače.

ExDeleteTimer naplánuje rutinu ExTimerDeleteCallback, kterou implementuje ovladač, aby se spustila po odstranění objektu časovače, kdy ukazatel na tento objekt již není platný. Pokud je parametr Wait ve volání ExDeleteTimer nastaven na TRUE, volání rutiny ExTimerDeleteCallback se dokončí předtím, než ExDeleteTimer vrátí. Pokud je Wait nastaveno na FALSE, rutina ExTimerDeleteCallback může běžet před nebo po vrácení z ExDeleteTimer.

Další informace naleznete v tématu ExXxxRutiny časovače a EX_TIMER objekty.