ReactOS 0.4.17-dev-966-gf06eace
timerqueue.c File Reference
#include <k32.h>
#include <debug.h>
Include dependency graph for timerqueue.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

BOOL WINAPI BasepCreateDefaultTimerQueue (VOID)
 
BOOL WINAPI CancelTimerQueueTimer (IN HANDLE TimerQueue, IN HANDLE Timer)
 
BOOL WINAPI ChangeTimerQueueTimer (IN HANDLE TimerQueue, IN HANDLE Timer, IN ULONG DueTime, IN ULONG Period)
 
HANDLE WINAPI CreateTimerQueue (VOID)
 
BOOL WINAPI CreateTimerQueueTimer (OUT PHANDLE phNewTimer, IN HANDLE TimerQueue, IN WAITORTIMERCALLBACK Callback, IN PVOID Parameter, IN DWORD DueTime, IN DWORD Period, IN ULONG Flags)
 
BOOL WINAPI DeleteTimerQueue (IN HANDLE TimerQueue)
 
BOOL WINAPI DeleteTimerQueueEx (IN HANDLE TimerQueue, IN HANDLE CompletionEvent)
 
BOOL WINAPI DeleteTimerQueueTimer (IN HANDLE TimerQueue, IN HANDLE Timer, IN HANDLE CompletionEvent)
 
HANDLE WINAPI SetTimerQueueTimer (IN HANDLE TimerQueue, IN WAITORTIMERCALLBACK Callback, IN PVOID Parameter, IN DWORD DueTime, IN DWORD Period, IN BOOL PreferIo)
 

Variables

HANDLE BasepDefaultTimerQueue = NULL
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 13 of file timerqueue.c.

Function Documentation

◆ BasepCreateDefaultTimerQueue()

BOOL WINAPI BasepCreateDefaultTimerQueue ( VOID  )

Definition at line 24 of file timerqueue.c.

25{
27 HANDLE TimerQueue;
28
29 /* Already initialized */
31 return TRUE;
32
33 /* Create the timer queue */
34 Status = RtlCreateTimerQueue(&TimerQueue);
35 if (!NT_SUCCESS(Status))
36 {
38 DPRINT1("Unable to create the default timer queue!\n");
39 return FALSE;
40 }
41
42 /* Try to publish it. If another thread already did, throw ours away */
44 TimerQueue,
45 NULL) != NULL)
46 {
47 RtlDeleteTimerQueueEx(TimerQueue, NULL);
48 }
49
50 return TRUE;
51}
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
HANDLE BasepDefaultTimerQueue
Definition: timerqueue.c:18
Status
Definition: gdiplustypes.h:24
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
NTSYSAPI NTSTATUS NTAPI RtlCreateTimerQueue(PHANDLE TimerQueue)
Definition: threadpool.c:864
NTSYSAPI NTSTATUS NTAPI RtlDeleteTimerQueueEx(_In_ HANDLE TimerQueue, _In_opt_ HANDLE CompletionEvent)
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:167

Referenced by CreateTimerQueueTimer(), and SetTimerQueueTimer().

◆ CancelTimerQueueTimer()

BOOL WINAPI CancelTimerQueueTimer ( IN HANDLE  TimerQueue,
IN HANDLE  Timer 
)

Definition at line 61 of file timerqueue.c.

63{
65
66 if (!TimerQueue)
67 {
68 /* Use the default timer queue */
69 TimerQueue = BasepDefaultTimerQueue;
70 if (!TimerQueue)
71 {
72 /* A timer is being cancelled before one was created... fail */
74 return FALSE;
75 }
76 }
77
78 /* Delete the timer */
79 Status = RtlDeleteTimer(TimerQueue, Timer, NULL);
80 if (!NT_SUCCESS(Status))
81 {
83 return FALSE;
84 }
85
86 return TRUE;
87}
#define SetLastError(x)
Definition: compat.h:752
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
NTSYSAPI NTSTATUS NTAPI RtlDeleteTimer(_In_ HANDLE TimerQueue, _In_ HANDLE Timer, _In_ HANDLE CompletionEvent)

◆ ChangeTimerQueueTimer()

BOOL WINAPI ChangeTimerQueueTimer ( IN HANDLE  TimerQueue,
IN HANDLE  Timer,
IN ULONG  DueTime,
IN ULONG  Period 
)

Definition at line 94 of file timerqueue.c.

98{
100
101 if (!TimerQueue)
102 {
103 /* Use the default timer queue */
104 TimerQueue = BasepDefaultTimerQueue;
105 if (!TimerQueue)
106 {
107 /* A timer is being cancelled before one was created... fail */
109 return FALSE;
110 }
111 }
112
113 /* Delete the timer */
114 Status = RtlUpdateTimer(TimerQueue, Timer, DueTime, Period);
115 if (!NT_SUCCESS(Status))
116 {
118 return FALSE;
119 }
120
121 return TRUE;
122}
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
NTSYSAPI NTSTATUS NTAPI RtlUpdateTimer(_In_ HANDLE TimerQueue, _In_ HANDLE Timer, _In_ ULONG DueTime, _In_ ULONG Period)
_In_ WDFTIMER _In_ LONGLONG DueTime
Definition: wdftimer.h:190
_In_ LARGE_INTEGER _In_ ULONG Period
Definition: kefuncs.h:1304

◆ CreateTimerQueue()

HANDLE WINAPI CreateTimerQueue ( VOID  )

Definition at line 129 of file timerqueue.c.

130{
133
134 /* Create the timer queue */
136 if(!NT_SUCCESS(Status))
137 {
139 return NULL;
140 }
141
142 return Handle;
143}
ULONG Handle
Definition: gdb_input.c:15

◆ CreateTimerQueueTimer()

BOOL WINAPI CreateTimerQueueTimer ( OUT PHANDLE  phNewTimer,
IN HANDLE  TimerQueue,
IN WAITORTIMERCALLBACK  Callback,
IN PVOID  Parameter,
IN DWORD  DueTime,
IN DWORD  Period,
IN ULONG  Flags 
)

Definition at line 150 of file timerqueue.c.

157{
159
160 /* Parameter is not optional -- clear it now */
161 *phNewTimer = NULL;
162
163 /* Check if no queue was given */
164 if (!TimerQueue)
165 {
166 /* Create the queue if it didn't already exist */
168 {
169 return FALSE;
170 }
171
172 /* Use the default queue */
173 TimerQueue = BasepDefaultTimerQueue;
174 }
175
176 /* Create the timer. Note that no parameter checking is done here */
177 Status = RtlCreateTimer(TimerQueue,
178 phNewTimer,
179 Callback,
180 Parameter,
181 DueTime,
182 Period,
183 Flags);
184 if (!NT_SUCCESS(Status))
185 {
187 return FALSE;
188 }
189
190 return TRUE;
191}
_In_ ULONG _In_ ULONG _In_opt_ DXGKCB_MIRACAST_SEND_MESSAGE_CALLBACK Callback
Definition: dispmprt.h:620
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
Definition: dispmprt.h:245
BOOL WINAPI BasepCreateDefaultTimerQueue(VOID)
Definition: timerqueue.c:24
NTSYSAPI NTSTATUS NTAPI RtlCreateTimer(_In_ HANDLE TimerQueue, _In_ PHANDLE phNewTimer, _In_ WAITORTIMERCALLBACKFUNC Callback, _In_ PVOID Parameter, _In_ ULONG DueTime, _In_ ULONG Period, _In_ ULONG Flags)
_Inout_opt_ PVOID Parameter
Definition: rtltypes.h:336

Referenced by SHSetTimerQueueTimer(), Test1(), Test2(), and Test3().

◆ DeleteTimerQueue()

BOOL WINAPI DeleteTimerQueue ( IN HANDLE  TimerQueue)

Definition at line 198 of file timerqueue.c.

199{
200 /* We don't allow the user to delete the default timer queue */
201 if (!TimerQueue)
202 {
204 return FALSE;
205 }
206
207 /* Delete the timer queue */
208 RtlDeleteTimerQueueEx(TimerQueue, 0);
209 return TRUE;
210}

◆ DeleteTimerQueueEx()

BOOL WINAPI DeleteTimerQueueEx ( IN HANDLE  TimerQueue,
IN HANDLE  CompletionEvent 
)

Definition at line 217 of file timerqueue.c.

219{
221
222 /* We don't allow the user to delete the default timer queue */
223 if (!TimerQueue)
224 {
226 return FALSE;
227 }
228
229 /* Delete the timer queue */
230 Status = RtlDeleteTimerQueueEx(TimerQueue, CompletionEvent);
231 if (((CompletionEvent != INVALID_HANDLE_VALUE) && (Status == STATUS_PENDING)) ||
232 !(NT_SUCCESS(Status)))
233 {
234 /* In case CompletionEvent == NULL, RtlDeleteTimerQueueEx() returns before
235 all callback routines returned. We set the last error code to STATUS_PENDING
236 and return FALSE. In case CompletionEvent == INVALID_HANDLE_VALUE we only
237 can get here if another error occured. In case CompletionEvent is something
238 else, we get here and fail, even though it isn't really an error (if Status == STATUS_PENDING).
239 We also handle all other failures the same way. */
241 return FALSE;
242 }
243
244 return TRUE;
245}
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define STATUS_PENDING
Definition: telnetd.h:14

◆ DeleteTimerQueueTimer()

BOOL WINAPI DeleteTimerQueueTimer ( IN HANDLE  TimerQueue,
IN HANDLE  Timer,
IN HANDLE  CompletionEvent 
)

Definition at line 252 of file timerqueue.c.

255{
257
258 if (!TimerQueue)
259 {
260 /* Use the default timer queue */
261 TimerQueue = BasepDefaultTimerQueue;
262 if (!TimerQueue)
263 {
264 /* A timer is being cancelled before one was created... fail */
266 return FALSE;
267 }
268 }
269
270 /* Delete the timer */
271 Status = RtlDeleteTimer(TimerQueue, Timer, CompletionEvent);
272 if (((CompletionEvent != INVALID_HANDLE_VALUE) && (Status == STATUS_PENDING)) ||
273 !(NT_SUCCESS(Status)))
274 {
275 /* In case CompletionEvent == NULL, RtlDeleteTimerQueueEx() returns before
276 all callback routines returned. We set the last error code to STATUS_PENDING
277 and return FALSE. In case CompletionEvent == INVALID_HANDLE_VALUE we only
278 can get here if another error occured. In case CompletionEvent is something
279 else, we get here and fail, even though it isn't really an error (if Status == STATUS_PENDING).
280 We also handle all other failures the same way. */
282 return FALSE;
283 }
284
285 return TRUE;
286}

Referenced by Test2(), Test3(), and TimerCallback1().

◆ SetTimerQueueTimer()

HANDLE WINAPI SetTimerQueueTimer ( IN HANDLE  TimerQueue,
IN WAITORTIMERCALLBACK  Callback,
IN PVOID  Parameter,
IN DWORD  DueTime,
IN DWORD  Period,
IN BOOL  PreferIo 
)

Definition at line 293 of file timerqueue.c.

299{
302
303 /* Check if no queue was given */
304 if (!TimerQueue)
305 {
306 /* Create the queue if it didn't already exist */
308 {
309 return FALSE;
310 }
311
312 /* Use the default queue */
313 TimerQueue = BasepDefaultTimerQueue;
314 }
315
316 /* Create the timer */
317 Status = RtlCreateTimer(TimerQueue,
318 &Timer,
319 Callback,
320 Parameter,
321 DueTime,
322 Period,
324 if (!NT_SUCCESS(Status))
325 {
327 return NULL;
328 }
329
330 return Timer;
331}
#define WT_EXECUTEINIOTHREAD
Definition: winnt_old.h:1097
#define WT_EXECUTEDEFAULT
Definition: winnt_old.h:1096

Variable Documentation

◆ BasepDefaultTimerQueue