Freigeben über


CreateTimerQueueTimer-Funktion (threadpoollegacyapiset.h)

Erstellt einen Timer-Warteschlangen-Timer. Dieser Timer läuft zum angegebenen Fälligkeitszeitpunkt ab, dann nach jedem angegebenen Zeitraum. Wenn der Timer abläuft, wird die Rückruffunktion aufgerufen.

Syntax

BOOL CreateTimerQueueTimer(
  [out]          PHANDLE             phNewTimer,
  [in, optional] HANDLE              TimerQueue,
  [in]           WAITORTIMERCALLBACK Callback,
  [in, optional] PVOID               Parameter,
  [in]           DWORD               DueTime,
  [in]           DWORD               Period,
  [in]           ULONG               Flags
);

Parameter

[out] phNewTimer

Ein Zeiger auf einen Puffer, der bei der Rückgabe ein Handle zum Timer-Warteschlangen-Timer empfängt. Wenn dieses Handle abgelaufen ist und nicht mehr benötigt wird, geben Sie es durch Aufrufen von DeleteTimerQueueTimer frei.

[in, optional] TimerQueue

Ein Handle für die Zeitgeberwarteschlange. Dieses Handle wird von der CreateTimerQueue-Funktion zurückgegeben.

Wenn dieser Parameter NULL ist, wird der Timer der Standardtimerwarteschlange zugeordnet.

[in] Callback

Ein Zeiger auf die anwendungsdefinierte Funktion vom Typ WAITORTIMERCALLBACK , die ausgeführt werden soll, wenn der Timer abläuft. Weitere Informationen finden Sie unter WaitOrTimerCallback.

[in, optional] Parameter

Ein einzelner Parameterwert, der an die Rückruffunktion übergeben wird.

[in] DueTime

Die Zeitspanne in Millisekunden relativ zur aktuellen Zeit, die verstreichen muss, bevor der Timer zum ersten Mal signalisiert wird.

[in] Period

Der Zeitraum des Timers in Millisekunden. Wenn dieser Parameter null ist, wird der Timer einmal signalisiert. Wenn dieser Parameter größer als 0 (null) ist, ist der Timer periodisch. Ein periodischer Timer reaktiviert automatisch jedes Mal, wenn der Zeitraum verstrichen ist, bis der Timer abgebrochen wird.

[in] Flags

Bei diesem Parameter kann es sich um einen oder mehrere der folgenden Werte aus WinNT.h handeln.

Wert Bedeutung
WT_EXECUTEDEFAULT
0x00000000
Standardmäßig wird die Rückruffunktion in eine Warteschlange für einen Nicht-E/A-Workerthread eingereiht.
WT_EXECUTEINTIMERTHREAD
0x00000020
Die Rückruffunktion wird vom Timerthread selbst aufgerufen. Dieses Flag sollte nur für kurze Aufgaben verwendet werden, oder es kann sich auf andere Zeitgebervorgänge auswirken.

Die Rückruffunktion wird als APC in die Warteschlange gestellt. Es sollten keine warnbaren Wartevorgänge ausgeführt werden.

WT_EXECUTEINIOTHREAD
0x00000001
Dieses Flag wird nicht verwendet.

Windows Server 2003 und Windows XP: Die Rückruffunktion wird in die Warteschlange eines E/A-Workerthreads eingereiht. Dieses Flag sollte verwendet werden, wenn die Funktion in einem Thread ausgeführt werden soll, der in einem warnbaren Zustand wartet.

E/A-Workerthreads wurden ab Windows Vista und Windows Server 2008 entfernt.

WT_EXECUTEINPERSISTENTTHREAD
0x00000080
Die Rückruffunktion wird in eine Warteschlange mit einem Thread eingereiht, der nie beendet wird. Es wird nicht garantiert, dass jedes Mal derselbe Thread verwendet wird. Dieses Flag sollte nur für kurze Aufgaben verwendet werden, oder es kann sich auf andere Zeitgebervorgänge auswirken.

Dieses Flag muss festgelegt werden, wenn der Thread Funktionen aufruft, die APCs verwenden. Weitere Informationen finden Sie unter Asynchrone Prozeduraufrufe.

Beachten Sie, dass derzeit kein Workerthread wirklich persistent ist, obwohl kein Workerthread beendet wird, wenn E/A-Anforderungen ausstehen.

WT_EXECUTELONGFUNCTION
0x00000010
Die Rückruffunktion kann eine lange Wartezeit ausführen. Dieses Flag hilft dem System zu entscheiden, ob ein neuer Thread erstellt werden soll.
WT_EXECUTEONLYONCE
0x00000008
Der Timer wird nur einmal auf den Signalzustand festgelegt. Wenn dieses Flag festgelegt ist, muss der Period-Parameter null sein.
WT_TRANSFER_IMPERSONATION
0x00000100
Rückruffunktionen verwenden das aktuelle Zugriffstoken, unabhängig davon, ob es sich um ein Prozess- oder Identitätswechseltoken handelt. Wenn dieses Flag nicht angegeben ist, werden Rückruffunktionen nur mit dem Prozesstoken ausgeführt.

Windows XP: Dieses Flag wird erst unter Windows XP mit SP2 und Windows Server 2003 unterstützt.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Wenn die Parameter DueTime und Period ungleich null sind, wird der Timer zuerst zur Fälligkeit und dann in regelmäßigen Abständen signalisiert. Der Rückruf wird bei jedem Ablauf des Zeitraums aufgerufen, unabhängig davon, ob die Ausführung des vorherigen Rückrufs abgeschlossen wurde. Rückruffunktionen werden im Threadpool in die Warteschlange eingereiht. Diese Threads unterliegen Planungsverzögerungen, sodass der Zeitpunkt je nach den anderen Vorgängen in der Anwendung oder im System variieren kann.

Die Zeit, die das System im Ruhezustand oder Ruhezustand verbringt, zählt nicht zum Ablauf des Timers. Der Timer wird signalisiert, wenn die kumulative Menge der verstrichenen Zeit, die das System im Wachzustand verbringt, mit der Fälligkeit des Zeitgebers übereinstimmt.

Windows Server 2003 und Windows XP: Die Zeit, die das System im Ruhezustand oder Ruhezustand verbringt, zählt bis zum Ablauf des Timers. Wenn der Timer abläuft, während sich das System im Ruhezustand befindet, wird der Timer sofort signalisiert, wenn das System aktiviert wird.

Um einen Timer abzubrechen, rufen Sie die DeleteTimerQueueTimer-Funktion auf. Um alle Zeitgeber in einer Zeitgeberwarteschlange abzubrechen, rufen Sie die DeleteTimerQueueEx-Funktion auf.

Standardmäßig verfügt der Threadpool über maximal 500 Threads. Verwenden Sie zum Erhöhen dieses Grenzwerts das in WinNT.h definierte makro WT_SET_MAX_THREADPOOL_THREAD .

#define WT_SET_MAX_THREADPOOL_THREADS(Flags,Limit) \
    ((Flags)|=(Limit)<<16)

Verwenden Sie dieses Makro, wenn Sie den Flags-Parameter angeben. Die Makroparameter sind die gewünschten Flags und der neue Grenzwert (bis zu (2<<16)-1 Threads). Beachten Sie jedoch, dass Ihre Anwendung die Leistung verbessern kann, indem die Anzahl der Workerthreads niedrig gehalten wird.

Um eine Anwendung zu kompilieren, die diese Funktion verwendet, definieren Sie _WIN32_WINNT als 0x0500 oder höher. Weitere Informationen finden Sie unter Verwenden der Windows-Header.

Beispiele

Ein Beispiel, das CreateTimerQueueTimer verwendet, finden Sie unter Verwenden von Timerwarteschlangen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile threadpoollegacyapiset.h
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

CreateTimerQueue

DeleteTimerQueueEx

DeleteTimerQueueTimer

Synchronisierungsfunktionen

Pooling von Threads

Timerwarteschlangen