TestSynchWaitableTimer.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include <winpr/crt.h>
  2. #include <winpr/synch.h>
  3. int TestSynchWaitableTimer(int argc, char* argv[])
  4. {
  5. DWORD status;
  6. HANDLE timer;
  7. LONG period;
  8. LARGE_INTEGER due;
  9. int result = -1;
  10. WINPR_UNUSED(argc);
  11. WINPR_UNUSED(argv);
  12. timer = CreateWaitableTimer(NULL, FALSE, NULL);
  13. if (!timer)
  14. {
  15. printf("CreateWaitableTimer failure\n");
  16. goto out;
  17. }
  18. due.QuadPart = -15000000LL; /* 1.5 seconds */
  19. if (!SetWaitableTimer(timer, &due, 0, NULL, NULL, 0))
  20. {
  21. printf("SetWaitableTimer failure\n");
  22. goto out;
  23. }
  24. status = WaitForSingleObject(timer, INFINITE);
  25. if (status != WAIT_OBJECT_0)
  26. {
  27. printf("WaitForSingleObject(timer, INFINITE) failure\n");
  28. goto out;
  29. }
  30. printf("Timer Signaled\n");
  31. status = WaitForSingleObject(timer, 2000);
  32. if (status != WAIT_TIMEOUT)
  33. {
  34. printf("WaitForSingleObject(timer, 2000) failure: Actual: 0x%08" PRIX32
  35. ", Expected: 0x%08X\n",
  36. status, WAIT_TIMEOUT);
  37. goto out;
  38. }
  39. due.QuadPart = 0;
  40. period = 1200; /* 1.2 seconds */
  41. if (!SetWaitableTimer(timer, &due, period, NULL, NULL, 0))
  42. {
  43. printf("SetWaitableTimer failure\n");
  44. goto out;
  45. }
  46. if (WaitForSingleObject(timer, INFINITE) != WAIT_OBJECT_0)
  47. {
  48. printf("WaitForSingleObject(timer, INFINITE) failure\n");
  49. goto out;
  50. }
  51. printf("Timer Signaled\n");
  52. if (!SetWaitableTimer(timer, &due, period, NULL, NULL, 0))
  53. {
  54. printf("SetWaitableTimer failure\n");
  55. goto out;
  56. }
  57. if (WaitForMultipleObjects(1, &timer, FALSE, INFINITE) != WAIT_OBJECT_0)
  58. {
  59. printf("WaitForMultipleObjects(timer, INFINITE) failure\n");
  60. goto out;
  61. }
  62. printf("Timer Signaled\n");
  63. result = 0;
  64. out:
  65. CloseHandle(timer);
  66. return result;
  67. }