Megosztás a következőn keresztül:


Várakozási időzítőobjektumok

A várakozó időzítőobjektum olyan szinkronizálási objektum, amelynek állapota a megadott határidő beérkezésekor jelzésre van állítva. Kétféle várakozási időzítő hozható létre: manuális alaphelyzetbe állítás és szinkronizálás. Bármelyik típusú időzítő lehet rendszeres időzítő is.

Tárgy Leírás
manuális alaphelyzetbe állítás időzítő Egy időzítő, amelynek állapota a SetWaitableTimer-ig lesz jelezve, új határidő megállapítására lesz meghívva.
szinkronizálási időzítő Az az időzítő, amelynek állapota addig lesz jelezve, amíg egy szál nem végez várakozási műveletet az időzítőobjektumon.
periodikus időzítő A megadott időszak lejáratakor újraaktivált időzítő az időzítő alaphelyzetbe állításáig vagy megszakításáig. A periodikus időzítők vagy rendszeres manuális visszaállítási időzítők, vagy időszakos szinkronizálási időzítők.

 

Jegyzet

Időzítő jelzése esetén a processzornak futnia kell a kapcsolódó utasítások feldolgozásához. A nagy gyakoriságú periodikus időzítők folyamatosan elfoglalják a processzort, ami megakadályozza, hogy a rendszer kisebb energiaállapotban bármilyen jelentős ideig. Ez negatív hatással lehet a hordozható számítógépek akkumulátorának élettartamára, és olyan forgatókönyvekre, amelyek a hatékony energiagazdálkodástól, például a nagy adatközpontoktól függenek. A nagyobb energiahatékonyság érdekében érdemes lehet eseményalapú értesítéseket használni az alkalmazás időalapú értesítései helyett. Ha időzítőre van szükség, használjon egy időzítőt, amely nem rendszeres, hanem egyszer van jelezve, vagy állítsa az intervallumot egy másodpercnél nagyobb értékre.

 

Egy szál a CreateWaitableTimer vagy CreateWaitableTimerEx függvényt használja időzítőobjektum létrehozásához. A létrehozási szál megadja, hogy az időzítő manuális alaphelyzetbe állítási időzítő vagy szinkronizálási időzítő-e. A létrehozási szál megadhatja az időzítőobjektum nevét. Más folyamatok szálai megnyithatnak egy leírót egy meglévő időzítő számára, ha megadják a nevét az OpenWaitableTimer függvény hívásában. Az időzítőobjektumhoz fogóponttal rendelkező szálak a várakozási függvények egyikét használhatják, várni az időzítő állapotának jelzésére.

  • A szál meghívja a SetWaitableTimer függvényt az időzítő aktiválásához. Vegye figyelembe az alábbi paraméterek használatát SetWaitableTimeresetében:
  • Az lpDueTime paraméter használatával adja meg, hogy az időzítő mikor legyen beállítva a jelzett állapotra. Ha egy manuális visszaállítási időzítő a jelzett állapotra van állítva, akkor ebben az állapotban marad, amíg SetWaitableTimer új határidőt nem állít be. Ha egy szinkronizálási időzítő a jelzett állapotra van állítva, az ebben az állapotban marad, amíg egy szál nem végez várakozási műveletet az időzítőobjektumon.
  • Az SetWaitableTimer függvény lPeriod paraméterével adja meg az időzítő időtartamát. Ha az időszak nem nulla, az időzítő rendszeres időzítő; az újraaktiválás minden alkalommal, amikor az időszak lejár, az időzítő alaphelyzetbe állításáig vagy megszakításáig. Ha az időszak nulla, az időzítő nem rendszeres időzítő; egyszer lesz jelezve, majd inaktiválja.

A szálak a CancelWaitableTimer függvénnyel állíthatják be az időzítőt inaktív állapotba. Az időzítő alaphelyzetbe állításához hívja meg SetWaitableTimer. Ha befejezte az időzítőobjektumot, hívja meg CloseHandle, hogy zárja be a leírót az időzítőobjektumhoz.

A várakozó időzítő viselkedése az alábbiak szerint foglalható össze:

  • Ha egy időzítő be van állítva, a rendszer megszakítja, ha már aktív volt, az időzítő állapota nem lesz aláírva, és az időzítő a kernel időzítősorába kerül.
  • Ha egy időzítő lejár, az időzítő a jelzett állapotra van állítva. Ha az időzítő befejező rutinnal rendelkezik, a rendszer az időzítőt beállítva üzenetsorba kerül. A befejezési rutin a szál aszinkron eljáráshívási (APC) üzenetsorában marad, amíg a szál riasztási várakozási állapotba nem kerül. Ekkor a program az APC-t küldi el, és meghívja a befejezési rutint. Ha az időzítő rendszeres, a rendszer visszakerül a kernel időzítősorába.
  • Ha egy időzítőt megszakít, a rendszer eltávolítja azt a kernel időzítősorából, ha függőben volt. Ha az időzítő lejárt, és továbbra is egy APC van várólistán az időzítőt beállítva, az APC el lesz távolítva a szál APC-üzenetsorából. Az időzítő jelzett állapota nincs hatással.

aszinkron eljáráshívások

Várakozó időzítőobjektumok használata