summaryrefslogtreecommitdiffstats
path: root/winpr/libwinpr/synch/test/TestSynchWaitableTimer.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--winpr/libwinpr/synch/test/TestSynchWaitableTimer.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/winpr/libwinpr/synch/test/TestSynchWaitableTimer.c b/winpr/libwinpr/synch/test/TestSynchWaitableTimer.c
new file mode 100644
index 0000000..f61bbc1
--- /dev/null
+++ b/winpr/libwinpr/synch/test/TestSynchWaitableTimer.c
@@ -0,0 +1,83 @@
+
+#include <winpr/crt.h>
+#include <winpr/synch.h>
+
+int TestSynchWaitableTimer(int argc, char* argv[])
+{
+ DWORD status = 0;
+ HANDLE timer = NULL;
+ LONG period = 0;
+ LARGE_INTEGER due;
+ int result = -1;
+ WINPR_UNUSED(argc);
+ WINPR_UNUSED(argv);
+ timer = CreateWaitableTimer(NULL, FALSE, NULL);
+
+ if (!timer)
+ {
+ printf("CreateWaitableTimer failure\n");
+ goto out;
+ }
+
+ due.QuadPart = -1500000LL; /* 0.15 seconds */
+
+ if (!SetWaitableTimer(timer, &due, 0, NULL, NULL, 0))
+ {
+ printf("SetWaitableTimer failure\n");
+ goto out;
+ }
+
+ status = WaitForSingleObject(timer, INFINITE);
+
+ if (status != WAIT_OBJECT_0)
+ {
+ printf("WaitForSingleObject(timer, INFINITE) failure\n");
+ goto out;
+ }
+
+ printf("Timer Signaled\n");
+ status = WaitForSingleObject(timer, 200);
+
+ if (status != WAIT_TIMEOUT)
+ {
+ printf("WaitForSingleObject(timer, 200) failure: Actual: 0x%08" PRIX32
+ ", Expected: 0x%08X\n",
+ status, WAIT_TIMEOUT);
+ goto out;
+ }
+
+ due.QuadPart = 0;
+ period = 120; /* 0.12 seconds */
+
+ if (!SetWaitableTimer(timer, &due, period, NULL, NULL, 0))
+ {
+ printf("SetWaitableTimer failure\n");
+ goto out;
+ }
+
+ if (WaitForSingleObject(timer, INFINITE) != WAIT_OBJECT_0)
+ {
+ printf("WaitForSingleObject(timer, INFINITE) failure\n");
+ goto out;
+ }
+
+ printf("Timer Signaled\n");
+
+ if (!SetWaitableTimer(timer, &due, period, NULL, NULL, 0))
+ {
+ printf("SetWaitableTimer failure\n");
+ goto out;
+ }
+
+ if (WaitForMultipleObjects(1, &timer, FALSE, INFINITE) != WAIT_OBJECT_0)
+ {
+ printf("WaitForMultipleObjects(timer, INFINITE) failure\n");
+ goto out;
+ }
+
+ printf("Timer Signaled\n");
+ result = 0;
+out:
+ CloseHandle(timer);
+ return result;
+}