每隔N秒钟与Windows系统时钟同步一次

关于如何每N秒钟做一些事情有很多提示,只是没有发现明确指出这些方法是否由于延迟而慢慢地与系统时钟不同步。

我有一个在Windows上运行的multithreading应用程序。 我需要知道,在更高优先级的任务和线程所允许的几毫秒内,一个特定的线程将根据系统时钟在“精确”上午1点可靠地执行,然后在1am + N秒,1am + 2N秒等等。并在下午11点,晚上11点+ N,晚上11点+2点等无限期地保持可靠的工作。 是的 – 情况就是这样(对我来说)每小时有N个这样的N个整数。

我完全期待线程执行的实际时间是1am + d1,1am + N + d2,1am + 2N + d3,…其中每个d(i)是一些等待时间的增量。 这也没关系,只要Delta值的分布保持合理的一致性和相当低的水平,一般在几十毫秒的时间里,就会出现罕见的尖峰。 我不介意系统时钟是否与全球时间标准不同步。

我可以使用什么时机构造来达到这个目的? 有没有什么东西能够保持同步本身,还是我必须编写一些能够随着处理器负载在一天中的升降而保持同步以保持同步的东西?

CreateWaitableTimer和SetWaitableTimer让你等待(WaitForSingleObject,或完成端口,或任何等待)而不是睡眠。

另外,你可以给它一个精确的绝对时间,或相对的时间,无论你想要的。 如果你想在1AM之后精确的N秒,给它一个1 AM + N秒的绝对时间。

另外,如果你指定的话,它甚至可以工作,如果电脑进入休眠之间。

只要看看从现在开始到下一次醒来的时间,然后睡上一段时间。 因此,不要每隔n秒设置一个重复定时器,每次唤醒时都要设置一次性定时器,无论在现在还是在时间轴上的下一个点之间需要花费很多时间。

更新 :我写了一个测试程序,看看重复的计时器是否会漂移。

程序从下一分钟开始,然后每5秒唤醒一次:

#include <windows.h> #include<stdio.h> ULONGLONG convertTime(SYSTEMTIME st) { FILETIME ft; ULARGE_INTEGER tm; SystemTimeToFileTime(&st, &ft); tm.u.LowPart = ft.dwLowDateTime; tm.u.HighPart = ft.dwHighDateTime; return tm.QuadPart; } ULONGLONG getNextMinute() { SYSTEMTIME now; GetSystemTime(&now); ULONGLONG ONE_MINUTE = 60 * 10000000; ULONGLONG nowNumeric = convertTime(now); ULONGLONG desiredTime = ((ULONGLONG)(nowNumeric / ONE_MINUTE)) * ONE_MINUTE + ONE_MINUTE; return desiredTime; } int main(int argc, char* argv[]) { ULONGLONG startTimeForTimer = getNextMinute(); HANDLE hTimer = NULL; hTimer = CreateWaitableTimer(NULL, FALSE, NULL); if (NULL == hTimer) { printf("CreateWaitableTimer failed (%d)\n", GetLastError()); return 1; } printf("Waiting for the next minute to start...\n"); // Set a timer to wait for 5 seconds. if (!SetWaitableTimer(hTimer, &startTimeForTimer, 5000, NULL, NULL, 0)) { printf("SetWaitableTimer failed (%d)\n", GetLastError()); return 2; } // Wait for the timer. SYSTEMTIME beforeTime; SYSTEMTIME afterTime; GetSystemTime(&beforeTime); while (WaitForSingleObject(hTimer, INFINITE) == WAIT_OBJECT_0) { GetSystemTime(&afterTime); ULONGLONG elapsedTime = convertTime(afterTime) - convertTime(beforeTime); printf("Timer was signaled: elapsed=%I64u, seconds=%02d.%02d\n", elapsedTime, afterTime.wSecond, afterTime.wMilliseconds); GetSystemTime(&beforeTime); } return 0; } 

这是运行一段时间后的结果(删除了一些无趣的位)。 seconds=位是当前分钟之后的秒数(低至1000秒):

 Timer was signaled: elapsed=297650000, seconds=59.98 Timer was signaled: elapsed=50000000, seconds=04.986 Timer was signaled: elapsed=50000000, seconds=09.986 Timer was signaled: elapsed=50000000, seconds=14.986 Timer was signaled: elapsed=50000000, seconds=19.986 ... Timer was signaled: elapsed=50000000, seconds=09.986 Timer was signaled: elapsed=49990000, seconds=14.985 Timer was signaled: elapsed=50000000, seconds=19.985 ... Timer was signaled: elapsed=50000000, seconds=24.985 Timer was signaled: elapsed=49990000, seconds=29.984 ... Timer was signaled: elapsed=50000000, seconds=54.973 Timer was signaled: elapsed=50000000, seconds=59.973 Timer was signaled: elapsed=50000000, seconds=04.973 Timer was signaled: elapsed=49990000, seconds=09.972 Timer was signaled: elapsed=50000000, seconds=14.972 Timer was signaled: elapsed=50000000, seconds=19.972 Timer was signaled: elapsed=50000000, seconds=24.972 Timer was signaled: elapsed=50020000, seconds=29.974 Timer was signaled: elapsed=50020000, seconds=34.976 Timer was signaled: elapsed=50020000, seconds=39.978 Timer was signaled: elapsed=50020000, seconds=44.980 Timer was signaled: elapsed=50020000, seconds=49.982 Timer was signaled: elapsed=50020000, seconds=54.984 Timer was signaled: elapsed=50010000, seconds=59.985 Timer was signaled: elapsed=50020000, seconds=04.987 Timer was signaled: elapsed=50020000, seconds=09.989 Timer was signaled: elapsed=50020000, seconds=14.991 Timer was signaled: elapsed=50020000, seconds=19.993 Timer was signaled: elapsed=50020000, seconds=24.995 Timer was signaled: elapsed=50020000, seconds=29.997 Timer was signaled: elapsed=50020000, seconds=34.999 Timer was signaled: elapsed=50020000, seconds=40.01 Timer was signaled: elapsed=50020000, seconds=45.03 Timer was signaled: elapsed=50020000, seconds=50.05 Timer was signaled: elapsed=50020000, seconds=55.07 Timer was signaled: elapsed=50020000, seconds=00.09 Timer was signaled: elapsed=50010000, seconds=05.10 Timer was signaled: elapsed=50020000, seconds=10.12 Timer was signaled: elapsed=50020000, seconds=15.14 Timer was signaled: elapsed=50020000, seconds=20.16 Timer was signaled: elapsed=50020000, seconds=25.18 Timer was signaled: elapsed=50020000, seconds=30.20 Timer was signaled: elapsed=50020000, seconds=35.22 Timer was signaled: elapsed=50020000, seconds=40.24 Timer was signaled: elapsed=50020000, seconds=45.26 Timer was signaled: elapsed=50020000, seconds=50.28 Timer was signaled: elapsed=50020000, seconds=55.30 Timer was signaled: elapsed=50020000, seconds=00.32 Timer was signaled: elapsed=50010000, seconds=05.33 Timer was signaled: elapsed=50020000, seconds=10.35 Timer was signaled: elapsed=50020000, seconds=15.37 Timer was signaled: elapsed=50020000, seconds=20.39 Timer was signaled: elapsed=50020000, seconds=25.41 Timer was signaled: elapsed=50020000, seconds=30.43 Timer was signaled: elapsed=50020000, seconds=35.45 Timer was signaled: elapsed=50020000, seconds=40.47 Timer was signaled: elapsed=50020000, seconds=45.49 Timer was signaled: elapsed=50020000, seconds=50.51 Timer was signaled: elapsed=50020000, seconds=55.53 Timer was signaled: elapsed=50170000, seconds=00.70 Timer was signaled: elapsed=49870000, seconds=05.57 Timer was signaled: elapsed=50010000, seconds=10.58 Timer was signaled: elapsed=50020000, seconds=15.60 Timer was signaled: elapsed=50020000, seconds=20.62 Timer was signaled: elapsed=50020000, seconds=25.64 Timer was signaled: elapsed=50020000, seconds=30.66 Timer was signaled: elapsed=50020000, seconds=35.68 Timer was signaled: elapsed=50020000, seconds=40.70 Timer was signaled: elapsed=50020000, seconds=45.72 Timer was signaled: elapsed=50020000, seconds=50.74 Timer was signaled: elapsed=50020000, seconds=55.76 Timer was signaled: elapsed=50020000, seconds=00.78 Timer was signaled: elapsed=50020000, seconds=05.80 Timer was signaled: elapsed=50010000, seconds=10.81 Timer was signaled: elapsed=50020000, seconds=15.83 Timer was signaled: elapsed=50020000, seconds=20.85 Timer was signaled: elapsed=50020000, seconds=25.87 Timer was signaled: elapsed=50010000, seconds=30.88 Timer was signaled: elapsed=50010000, seconds=35.89 Timer was signaled: elapsed=50000000, seconds=40.89 Timer was signaled: elapsed=50010000, seconds=45.90 Timer was signaled: elapsed=50010000, seconds=50.91 Timer was signaled: elapsed=50000000, seconds=55.91 Timer was signaled: elapsed=50010000, seconds=00.92 Timer was signaled: elapsed=50010000, seconds=05.93 Timer was signaled: elapsed=50000000, seconds=10.93 Timer was signaled: elapsed=50010000, seconds=15.94 Timer was signaled: elapsed=50010000, seconds=20.95 Timer was signaled: elapsed=50000000, seconds=25.95 Timer was signaled: elapsed=50010000, seconds=30.96 Timer was signaled: elapsed=50010000, seconds=35.97 Timer was signaled: elapsed=50000000, seconds=40.97 Timer was signaled: elapsed=50010000, seconds=45.98 Timer was signaled: elapsed=50010000, seconds=50.99 Timer was signaled: elapsed=50000000, seconds=55.99 Timer was signaled: elapsed=50010000, seconds=00.100 Timer was signaled: elapsed=50010000, seconds=05.101 Timer was signaled: elapsed=50000000, seconds=10.101 Timer was signaled: elapsed=50010000, seconds=15.102 Timer was signaled: elapsed=50010000, seconds=20.103 Timer was signaled: elapsed=50010000, seconds=25.104 Timer was signaled: elapsed=50000000, seconds=30.104 Timer was signaled: elapsed=50010000, seconds=35.105 Timer was signaled: elapsed=50010000, seconds=40.106 Timer was signaled: elapsed=50000000, seconds=45.106 Timer was signaled: elapsed=50010000, seconds=50.107 Timer was signaled: elapsed=50010000, seconds=55.108 Timer was signaled: elapsed=50000000, seconds=00.108 Timer was signaled: elapsed=50010000, seconds=05.109 Timer was signaled: elapsed=50010000, seconds=10.110 Timer was signaled: elapsed=50000000, seconds=15.110 Timer was signaled: elapsed=50010000, seconds=20.111 Timer was signaled: elapsed=50010000, seconds=25.112 Timer was signaled: elapsed=50000000, seconds=30.112 Timer was signaled: elapsed=50010000, seconds=35.113 Timer was signaled: elapsed=50010000, seconds=40.114 Timer was signaled: elapsed=50000000, seconds=45.114 Timer was signaled: elapsed=50010000, seconds=50.115 Timer was signaled: elapsed=50010000, seconds=55.116 Timer was signaled: elapsed=50000000, seconds=00.116 Timer was signaled: elapsed=50010000, seconds=05.117 Timer was signaled: elapsed=50010000, seconds=10.118 Timer was signaled: elapsed=50000000, seconds=15.118 Timer was signaled: elapsed=50010000, seconds=20.119 Timer was signaled: elapsed=50010000, seconds=25.120 Timer was signaled: elapsed=50000000, seconds=30.120 Timer was signaled: elapsed=50010000, seconds=35.121 Timer was signaled: elapsed=50010000, seconds=40.122 Timer was signaled: elapsed=50000000, seconds=45.122 Timer was signaled: elapsed=50010000, seconds=50.123 Timer was signaled: elapsed=50010000, seconds=55.124 Timer was signaled: elapsed=50000000, seconds=00.124 Timer was signaled: elapsed=50010000, seconds=05.125 Timer was signaled: elapsed=50010000, seconds=10.126 Timer was signaled: elapsed=50000000, seconds=15.126 Timer was signaled: elapsed=50010000, seconds=20.127 Timer was signaled: elapsed=50010000, seconds=25.128 Timer was signaled: elapsed=50000000, seconds=30.128 Timer was signaled: elapsed=50000000, seconds=35.128 Timer was signaled: elapsed=50000000, seconds=40.128 Timer was signaled: elapsed=50010000, seconds=45.129 Timer was signaled: elapsed=50000000, seconds=50.129 Timer was signaled: elapsed=50000000, seconds=55.129 Timer was signaled: elapsed=50000000, seconds=00.129 Timer was signaled: elapsed=50000000, seconds=05.129 Timer was signaled: elapsed=50000000, seconds=10.129 Timer was signaled: elapsed=50010000, seconds=15.130 Timer was signaled: elapsed=50000000, seconds=20.130 Timer was signaled: elapsed=50000000, seconds=25.130 Timer was signaled: elapsed=50000000, seconds=30.130 Timer was signaled: elapsed=50000000, seconds=35.130 Timer was signaled: elapsed=50010000, seconds=40.131 Timer was signaled: elapsed=50000000, seconds=45.131 Timer was signaled: elapsed=50000000, seconds=50.131 Timer was signaled: elapsed=50000000, seconds=55.131 Timer was signaled: elapsed=50000000, seconds=00.131 Timer was signaled: elapsed=50010000, seconds=05.132 Timer was signaled: elapsed=50000000, seconds=10.132 Timer was signaled: elapsed=50000000, seconds=15.132 Timer was signaled: elapsed=50000000, seconds=20.132 Timer was signaled: elapsed=50000000, seconds=25.132 Timer was signaled: elapsed=50010000, seconds=30.133 Timer was signaled: elapsed=50000000, seconds=35.133 Timer was signaled: elapsed=50000000, seconds=40.133 Timer was signaled: elapsed=50000000, seconds=45.133 Timer was signaled: elapsed=50000000, seconds=50.133 Timer was signaled: elapsed=50010000, seconds=55.134 Timer was signaled: elapsed=50000000, seconds=00.134 Timer was signaled: elapsed=50000000, seconds=05.134 Timer was signaled: elapsed=50000000, seconds=10.134 Timer was signaled: elapsed=50000000, seconds=15.134 Timer was signaled: elapsed=50000000, seconds=20.134 Timer was signaled: elapsed=50010000, seconds=25.135 Timer was signaled: elapsed=50000000, seconds=30.135 Timer was signaled: elapsed=50000000, seconds=35.135 Timer was signaled: elapsed=50000000, seconds=40.135 Timer was signaled: elapsed=50000000, seconds=45.135 Timer was signaled: elapsed=50010000, seconds=50.136 Timer was signaled: elapsed=50000000, seconds=55.136 Timer was signaled: elapsed=50000000, seconds=00.136 Timer was signaled: elapsed=50000000, seconds=05.136 Timer was signaled: elapsed=50000000, seconds=10.136 Timer was signaled: elapsed=50010000, seconds=15.137 Timer was signaled: elapsed=50000000, seconds=20.137 Timer was signaled: elapsed=50000000, seconds=25.137 Timer was signaled: elapsed=50000000, seconds=30.137 Timer was signaled: elapsed=50000000, seconds=35.137 Timer was signaled: elapsed=50010000, seconds=40.138 Timer was signaled: elapsed=50000000, seconds=45.138 Timer was signaled: elapsed=50000000, seconds=50.138 Timer was signaled: elapsed=50000000, seconds=55.138 Timer was signaled: elapsed=50000000, seconds=00.138 Timer was signaled: elapsed=50010000, seconds=05.139 Timer was signaled: elapsed=50000000, seconds=10.139 Timer was signaled: elapsed=50000000, seconds=15.139 Timer was signaled: elapsed=50000000, seconds=20.139 Timer was signaled: elapsed=50000000, seconds=25.139 Timer was signaled: elapsed=50000000, seconds=30.139 Timer was signaled: elapsed=50000000, seconds=35.139 Timer was signaled: elapsed=50000000, seconds=40.139 Timer was signaled: elapsed=50000000, seconds=45.139 Timer was signaled: elapsed=50000000, seconds=50.139 Timer was signaled: elapsed=50000000, seconds=55.139 Timer was signaled: elapsed=50010000, seconds=00.140 Timer was signaled: elapsed=50000000, seconds=05.140 Timer was signaled: elapsed=50000000, seconds=10.140 Timer was signaled: elapsed=50000000, seconds=15.140 Timer was signaled: elapsed=50000000, seconds=20.140 Timer was signaled: elapsed=50000000, seconds=25.140 Timer was signaled: elapsed=50000000, seconds=30.140 Timer was signaled: elapsed=50000000, seconds=35.140 Timer was signaled: elapsed=50000000, seconds=40.140 Timer was signaled: elapsed=50000000, seconds=45.140 Timer was signaled: elapsed=50000000, seconds=50.140 Timer was signaled: elapsed=50000000, seconds=55.140 Timer was signaled: elapsed=50000000, seconds=00.140 Timer was signaled: elapsed=50000000, seconds=05.140 Timer was signaled: elapsed=50000000, seconds=10.140 Timer was signaled: elapsed=50000000, seconds=15.140 Timer was signaled: elapsed=50000000, seconds=20.140 Timer was signaled: elapsed=50000000, seconds=25.140 Timer was signaled: elapsed=50000000, seconds=30.140 Timer was signaled: elapsed=50000000, seconds=35.140 Timer was signaled: elapsed=50000000, seconds=40.140 Timer was signaled: elapsed=50000000, seconds=45.140 Timer was signaled: elapsed=50000000, seconds=50.140 Timer was signaled: elapsed=50000000, seconds=55.140 Timer was signaled: elapsed=50000000, seconds=00.140 Timer was signaled: elapsed=50000000, seconds=05.140 Timer was signaled: elapsed=50000000, seconds=10.140 Timer was signaled: elapsed=50000000, seconds=15.140 Timer was signaled: elapsed=50000000, seconds=20.140 Timer was signaled: elapsed=50000000, seconds=25.140 Timer was signaled: elapsed=50000000, seconds=30.140 Timer was signaled: elapsed=50010000, seconds=35.141 Timer was signaled: elapsed=50000000, seconds=40.141 Timer was signaled: elapsed=50000000, seconds=45.141 Timer was signaled: elapsed=50000000, seconds=50.141 Timer was signaled: elapsed=50000000, seconds=55.141 Timer was signaled: elapsed=50000000, seconds=00.141 Timer was signaled: elapsed=50000000, seconds=05.141 Timer was signaled: elapsed=50000000, seconds=10.141 Timer was signaled: elapsed=50000000, seconds=15.141 Timer was signaled: elapsed=50000000, seconds=20.141 Timer was signaled: elapsed=50000000, seconds=25.141 Timer was signaled: elapsed=50000000, seconds=30.141 Timer was signaled: elapsed=50000000, seconds=35.141 Timer was signaled: elapsed=50000000, seconds=40.141 Timer was signaled: elapsed=50000000, seconds=45.141 Timer was signaled: elapsed=50000000, seconds=50.141 Timer was signaled: elapsed=50000000, seconds=55.141 Timer was signaled: elapsed=50000000, seconds=00.141 Timer was signaled: elapsed=50000000, seconds=05.141 Timer was signaled: elapsed=50000000, seconds=10.141 Timer was signaled: elapsed=50000000, seconds=15.141 Timer was signaled: elapsed=50000000, seconds=20.141 Timer was signaled: elapsed=50000000, seconds=25.141 Timer was signaled: elapsed=50000000, seconds=30.141 Timer was signaled: elapsed=50000000, seconds=35.141 Timer was signaled: elapsed=50000000, seconds=40.141 Timer was signaled: elapsed=50000000, seconds=45.141 Timer was signaled: elapsed=50000000, seconds=50.141 Timer was signaled: elapsed=50000000, seconds=55.141 Timer was signaled: elapsed=50000000, seconds=00.141 Timer was signaled: elapsed=50000000, seconds=05.141 Timer was signaled: elapsed=50000000, seconds=10.141 Timer was signaled: elapsed=50000000, seconds=15.141 Timer was signaled: elapsed=50000000, seconds=20.141 Timer was signaled: elapsed=50000000, seconds=25.141 Timer was signaled: elapsed=50000000, seconds=30.141 Timer was signaled: elapsed=50000000, seconds=35.141 Timer was signaled: elapsed=50000000, seconds=40.141 Timer was signaled: elapsed=50000000, seconds=45.141 Timer was signaled: elapsed=50000000, seconds=50.141 Timer was signaled: elapsed=50000000, seconds=55.141 Timer was signaled: elapsed=50000000, seconds=00.141 Timer was signaled: elapsed=50000000, seconds=05.141 Timer was signaled: elapsed=50000000, seconds=10.141 Timer was signaled: elapsed=50000000, seconds=15.141 Timer was signaled: elapsed=49990000, seconds=20.140 Timer was signaled: elapsed=50000000, seconds=25.140 Timer was signaled: elapsed=50000000, seconds=30.140 Timer was signaled: elapsed=50000000, seconds=35.140 Timer was signaled: elapsed=50000000, seconds=40.140 Timer was signaled: elapsed=50000000, seconds=45.140 Timer was signaled: elapsed=50000000, seconds=50.140 Timer was signaled: elapsed=50000000, seconds=55.140 Timer was signaled: elapsed=50000000, seconds=00.140 Timer was signaled: elapsed=50000000, seconds=05.140 Timer was signaled: elapsed=50000000, seconds=10.140 Timer was signaled: elapsed=50000000, seconds=15.140 Timer was signaled: elapsed=50000000, seconds=20.140 Timer was signaled: elapsed=50000000, seconds=25.140 Timer was signaled: elapsed=50000000, seconds=30.140 Timer was signaled: elapsed=50000000, seconds=35.140 Timer was signaled: elapsed=50000000, seconds=40.140 Timer was signaled: elapsed=50000000, seconds=45.140 Timer was signaled: elapsed=50000000, seconds=50.140 Timer was signaled: elapsed=50000000, seconds=55.140 Timer was signaled: elapsed=50000000, seconds=00.140 Timer was signaled: elapsed=50000000, seconds=05.140 Timer was signaled: elapsed=50000000, seconds=10.140 Timer was signaled: elapsed=50000000, seconds=15.140 Timer was signaled: elapsed=50000000, seconds=20.140 Timer was signaled: elapsed=50000000, seconds=25.140 Timer was signaled: elapsed=50000000, seconds=30.140 Timer was signaled: elapsed=50000000, seconds=35.140 Timer was signaled: elapsed=50000000, seconds=40.140 Timer was signaled: elapsed=50000000, seconds=45.140 Timer was signaled: elapsed=50000000, seconds=50.140 Timer was signaled: elapsed=49990000, seconds=55.139 Timer was signaled: elapsed=50000000, seconds=00.139 Timer was signaled: elapsed=50000000, seconds=05.139 Timer was signaled: elapsed=50000000, seconds=10.139 Timer was signaled: elapsed=50000000, seconds=15.139 Timer was signaled: elapsed=50000000, seconds=20.139 Timer was signaled: elapsed=50000000, seconds=25.139 Timer was signaled: elapsed=50000000, seconds=30.139 Timer was signaled: elapsed=50000000, seconds=35.139 Timer was signaled: elapsed=50000000, seconds=40.139 Timer was signaled: elapsed=50000000, seconds=45.139 Timer was signaled: elapsed=50000000, seconds=50.139 Timer was signaled: elapsed=50000000, seconds=55.139 Timer was signaled: elapsed=50000000, seconds=00.139 Timer was signaled: elapsed=50000000, seconds=05.139 Timer was signaled: elapsed=50000000, seconds=10.139 Timer was signaled: elapsed=50000000, seconds=15.139 Timer was signaled: elapsed=50000000, seconds=20.139 Timer was signaled: elapsed=50000000, seconds=25.139 Timer was signaled: elapsed=49990000, seconds=30.138 Timer was signaled: elapsed=50000000, seconds=35.138 Timer was signaled: elapsed=50000000, seconds=40.138 Timer was signaled: elapsed=50000000, seconds=45.138 Timer was signaled: elapsed=50000000, seconds=50.138 Timer was signaled: elapsed=50000000, seconds=55.138 Timer was signaled: elapsed=50000000, seconds=00.138 Timer was signaled: elapsed=50000000, seconds=05.138 Timer was signaled: elapsed=50000000, seconds=10.138 Timer was signaled: elapsed=50000000, seconds=15.138 Timer was signaled: elapsed=50000000, seconds=20.138 Timer was signaled: elapsed=50000000, seconds=25.138 Timer was signaled: elapsed=50000000, seconds=30.138 Timer was signaled: elapsed=50000000, seconds=35.138 Timer was signaled: elapsed=50000000, seconds=40.138 Timer was signaled: elapsed=50000000, seconds=45.138 Timer was signaled: elapsed=49990000, seconds=50.137 Timer was signaled: elapsed=50000000, seconds=55.137 Timer was signaled: elapsed=50000000, seconds=00.137 Timer was signaled: elapsed=50000000, seconds=05.137 Timer was signaled: elapsed=50000000, seconds=10.137 Timer was signaled: elapsed=50000000, seconds=15.137 Timer was signaled: elapsed=50000000, seconds=20.137 Timer was signaled: elapsed=50000000, seconds=25.137 Timer was signaled: elapsed=50000000, seconds=30.137 Timer was signaled: elapsed=50000000, seconds=35.137 Timer was signaled: elapsed=50000000, seconds=40.137 Timer was signaled: elapsed=50000000, seconds=45.137 Timer was signaled: elapsed=50000000, seconds=50.137 Timer was signaled: elapsed=50000000, seconds=55.137 Timer was signaled: elapsed=50000000, seconds=00.137 Timer was signaled: elapsed=49990000, seconds=05.136 Timer was signaled: elapsed=50000000, seconds=10.136 Timer was signaled: elapsed=50000000, seconds=15.136 Timer was signaled: elapsed=50000000, seconds=20.136 Timer was signaled: elapsed=50000000, seconds=25.136 Timer was signaled: elapsed=50000000, seconds=30.136 Timer was signaled: elapsed=50000000, seconds=35.136 Timer was signaled: elapsed=50000000, seconds=40.136 Timer was signaled: elapsed=50000000, seconds=45.136 Timer was signaled: elapsed=50000000, seconds=50.136 Timer was signaled: elapsed=50000000, seconds=55.136 Timer was signaled: elapsed=50000000, seconds=00.136 Timer was signaled: elapsed=50000000, seconds=05.136 Timer was signaled: elapsed=50000000, seconds=10.136 Timer was signaled: elapsed=50000000, seconds=15.136 Timer was signaled: elapsed=50000000, seconds=20.136 Timer was signaled: elapsed=49990000, seconds=25.135 Timer was signaled: elapsed=50000000, seconds=30.135 Timer was signaled: elapsed=50000000, seconds=35.135 Timer was signaled: elapsed=50000000, seconds=40.135 Timer was signaled: elapsed=50000000, seconds=45.135 Timer was signaled: elapsed=50000000, seconds=50.135 Timer was signaled: elapsed=50000000, seconds=55.135 Timer was signaled: elapsed=50000000, seconds=00.135 Timer was signaled: elapsed=50000000, seconds=05.135 Timer was signaled: elapsed=50000000, seconds=10.135 Timer was signaled: elapsed=50000000, seconds=15.135 Timer was signaled: elapsed=50000000, seconds=20.135 Timer was signaled: elapsed=50000000, seconds=25.135 Timer was signaled: elapsed=50000000, seconds=30.135 Timer was signaled: elapsed=50000000, seconds=35.135 Timer was signaled: elapsed=50000000, seconds=40.135 Timer was signaled: elapsed=49990000, seconds=45.134 Timer was signaled: elapsed=50000000, seconds=50.134 Timer was signaled: elapsed=50000000, seconds=55.134 Timer was signaled: elapsed=50000000, seconds=00.134 Timer was signaled: elapsed=50000000, seconds=05.134 Timer was signaled: elapsed=50000000, seconds=10.134 Timer was signaled: elapsed=50000000, seconds=15.134 Timer was signaled: elapsed=50000000, seconds=20.134 Timer was signaled: elapsed=50000000, seconds=25.134 Timer was signaled: elapsed=50000000, seconds=30.134 Timer was signaled: elapsed=50000000, seconds=35.134 Timer was signaled: elapsed=50000000, seconds=40.134 Timer was signaled: elapsed=50000000, seconds=45.134 Timer was signaled: elapsed=50000000, seconds=50.134 Timer was signaled: elapsed=50000000, seconds=55.134 Timer was signaled: elapsed=49990000, seconds=00.133 Timer was signaled: elapsed=50000000, seconds=05.133 Timer was signaled: elapsed=50000000, seconds=10.133 Timer was signaled: elapsed=50000000, seconds=15.133 Timer was signaled: elapsed=50000000, seconds=20.133 Timer was signaled: elapsed=50000000, seconds=25.133 Timer was signaled: elapsed=50000000, seconds=30.133 Timer was signaled: elapsed=50000000, seconds=35.133 Timer was signaled: elapsed=50000000, seconds=40.133 Timer was signaled: elapsed=50000000, seconds=45.133 Timer was signaled: elapsed=50000000, seconds=50.133 Timer was signaled: elapsed=50000000, seconds=55.133 Timer was signaled: elapsed=50000000, seconds=00.133 Timer was signaled: elapsed=50000000, seconds=05.133 Timer was signaled: elapsed=50000000, seconds=10.133 Timer was signaled: elapsed=50000000, seconds=15.133 Timer was signaled: elapsed=49990000, seconds=20.132 Timer was signaled: elapsed=50000000, seconds=25.132 Timer was signaled: elapsed=50000000, seconds=30.132 Timer was signaled: elapsed=50000000, seconds=35.132 Timer was signaled: elapsed=50000000, seconds=40.132 Timer was signaled: elapsed=50000000, seconds=45.132 Timer was signaled: elapsed=50000000, seconds=50.132 Timer was signaled: elapsed=50000000, seconds=55.132 Timer was signaled: elapsed=50000000, seconds=00.132 Timer was signaled: elapsed=50000000, seconds=05.132 Timer was signaled: elapsed=50000000, seconds=10.132 Timer was signaled: elapsed=50000000, seconds=15.132 Timer was signaled: elapsed=50000000, seconds=20.132 Timer was signaled: elapsed=50000000, seconds=25.132 Timer was signaled: elapsed=50000000, seconds=30.132 Timer was signaled: elapsed=49990000, seconds=35.131 Timer was signaled: elapsed=50000000, seconds=40.131 Timer was signaled: elapsed=50000000, seconds=45.131 Timer was signaled: elapsed=50000000, seconds=50.131 Timer was signaled: elapsed=50000000, seconds=55.131 Timer was signaled: elapsed=50000000, seconds=00.131 

总结 :其实我不知道这些结果会是什么。 它看起来像Windows正试图主动纠正定时器的任何漂移,以便每个唤醒发生在“适当”的时间。 如果是这样的话,那么这(设置一个你想要的时间间隔的计时器)绝对是完成你想要的最简单的方法。

SetWaitableTimer函数允许您指定特定的绝对时间和句点。

汉斯和亚当似乎关心的是使用一次性计时器时由于处理时间而引起的漂移(即,如果由于计时器而被唤醒,并且设置“在N秒内”的新计时器,则实际间隔为N秒+唤醒延迟+时间来创建新的定时器,通过使用周期性定时器,您不会有这个问题,或者您可以使用一次性定时器,并指定下一个绝对时间,这也将防止漂移。

总而言之,您将需要CreateWaitableTimerSetWaitableTimer和其中一个等待函数,如WaitForMultipleObjectsEx