WinCE 上C++的单次计时器

One-Shot Timer in C++ on WinCE

本文关键字:单次 计时器 C++ WinCE      更新时间:2023-10-16

我正在编写一个事件处理函数,f(d),它接收一些数据,d,并且必须X(d)采取行动,然后休眠100ms,然后Y(d)采取另一个动作。我会将其实现为:

void f(d)
{
X(d);
Sleep(100);
Y(d);
}

但是,f(d)是从单线程事件处理程序调用的,因此 Sleep(100) 是不可接受的。

我想做以下几点:

void f(d)
{
X(d);
ScheduleOneShotTimer(Y,d,100);
}

我可以通过为每个调用创建一个新线程,将数据作为线程参数传递,并在执行Y(d)之前调用Sleep来实现ScheduleOneShotTimer。但是,由于此事件每秒可能发生多达 100 次,因此我担心创建销毁所有这些线程所涉及的开销。

最好是操作系统级别对"一次性计时器"的支持,但我认为 CE 上并非如此。我知道 SetTimer,但这不适用于我,因为我正在编写一个没有消息循环的"控制台应用程序"。

关于如何构建此结构的任何其他建议将不胜感激。

调用timeSetEventAPI(我知道这是一个完全不直观的API名称)。 使用回调函数和TIME_ONESHOT参数。

我会创建一个线程来保留时间戳回调对队列,休眠 100 毫秒(或更小的时间),然后执行所有经过的回调。 具有所有线程间同步的 OFC(关键部分的互锁等)。

这是一个注重性能的解决方案,而不是一个以精度为导向的解决方案。随着回调的堆积,执行时间可能超过 100 毫秒。但是由于您正在使用Wait(不精确)测量时间,我想这可能已经足够好了。