虽然多年前的问题,接续http://bbs.csdn.net/topics/350068269中的讨论 ,始终没有找到合理的解释,通过分析winceos 核心源代码得知,在SCHEDULE.C文件中的SystemStartupFunc()函数中会调用OEMSetAlarmTime,但是是根据条件判断的。
什么条件呢,就是ft和ft3两个时间相关变量的比较。
if (hAlarmEvent) {
OEMGetRealTime(&st);
KSystemTimeToFileTime(&st,&ft);
KSystemTimeToFileTime(&CurAlarmTime,&ft2);
ft3.dwLowDateTime = 100000000; // 10 seconds
ft3.dwHighDateTime = 0;
sub64_64_64(&ft2,&ft3,&ft3);
if (KCompareFileTime(&ft,&ft3) >= 0) {
SetEvent(hAlarmEvent);
hAlarmEvent = NULL;
} else
OEMSetAlarmTime(&CurAlarmTime);
}