WinCE上用C ++编写的单次定时器

时间:2012-12-16 17:12:51

标签: c++ timer windows-ce scheduling

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

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

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

我想做以下事情:

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

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

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

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

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

这是一种注重表现的解决方案,而不是精确导向的解决方案。随着回调的累积,执行时间可能会超过100毫秒。但是因为你用Wait测量时间(这不准确),我想这可能已经足够了。